项目的目录结构:

项目前提: 安装并启动Redis

安装Django和Celery的定时任务插件

安装方法一: pip直接安装【安装了pip的前提下】

omc@omc-virtual-machine:~$  pip3 install django-celery-beat

安装方法二:直接源安装

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django-celery-beat

CeleryTest/settings.py

INSTALLED_APPS = [
...
'app01', # 注册app
'django_celery_beat', # Celery的定时任务和Django结合 ]
MIDDLEWARE = [
...
# 'django.middleware.csrf.CsrfViewMiddleware',
...
] STATICFILES_DIRS = (os.path.join(BASE_DIR, "statics"),) # 现添加的配置,这里是元组,注意逗号
TEMPLATES = [
...
'DIRS': [os.path.join(BASE_DIR, 'templates')],
]
# for celery
CELERY_BROKER_URL = 'redis://192.168.2.105',
CELERY_BACKEND_URL = 'redis://192.168.2.105', # 用于Celery的返回结果的接收

插件利用创建表来管理定时任务的

omc@omc-virtual-machine:~/Celery/CeleryTest$ cd /home/omc/Celery/CeleryTest
omc@omc-virtual-machine:~/Celery/CeleryTest$ python3 manage.py migrate

CeleryTest/urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
url(r'index/', views.Index),
]

app01/tasks.py  文件名必须为tasks.py

# 文件名必须为tasks.py,Djaogo才能发现Celery
from __future__ import absolute_import, unicode_literals
from celery import shared_task # Django starts so that the @shared_task decorator (mentioned later) will use it:  
@shared_task # Django的各个App里都可以导入这个任务,否则只能在app01这个Django的App内使用
def add(x, y):
return x + y @shared_task
def mul(x, y):
return x * y @shared_task
def xsum(numbers):
return sum(numbers)

CeleryTest/celery.py 文件名必须为celery.py

from __future__ import absolute_import, unicode_literals
import os
from celery import Celery # set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'CeleryTest.settings') app = Celery('CeleryTest') # Using a string here means the worker don't have to serialize
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY') # Load task modules from all registered Django app configs.
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))

CeleryTest/__init__.py

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app __all__ = ['celery_app']

上传文件到Linux服务器【Linux服务器需安装好Django服务】

需要Ubuntu下安装Django

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple django

在Linux的后台启动任务:

omc@omc-virtual-machine:~/Celery/CeleryTest$ python3 manage.py runserver 0.0.0.0:9000

在Linux的后台创建super用户:

omc@omc-virtual-machine:~/Celery/CeleryTest$  cd /home/omc/Celery/CeleryTest
omc@omc-virtual-machine:~/Celery/CeleryTest$ python3 manage.py createsuperuser

在Win7下浏览器访问:

http://192.168.2.105:9000/admin/

在admin页面里,多了4张表

添加存储计划:页面之间添加即可

Intervals表创建一个10秒的任务

添加一个periodictask任务

注意:到此只是存储了一个定时计划而已,执行不了

Celery-beat调度器从Django内读取任务后发布给Celery的worker去执行

Linux后台启动Celery的worker

omc@omc-virtual-machine:~/Celery/CeleryTest$  cd /home/omc/Celery/CeleryTest
omc@omc-virtual-machine:~/Celery/CeleryTest$ celery -A CeleryTest worker -l info

启动Celery-beat的调度器:从django内读取定时任务让后台worker执行

omc@omc-virtual-machine:/etc/redis$ cd /home/omc/Celery/CeleryTest/
omc@omc-virtual-machine:~/Celery/CeleryTest$ celery -A CeleryTest beat -l info -S django

右侧定时调取,左侧执行任务

简单梳理一下:后台上传Django和Celery整合后的文件,配置好Celery-beat后,在Linux后台启动Django项目,从Win7下访问admin进入页面后有一个定时任务的配置页面,配置好了页面的定时任务后,在Linux后台启动Celery的worker, 启动Celery-beat的调度器。此时调度器从Django内的schedule表中获取任务同时调用Celery的worker去执行任务,从而达到定时执行任务的效果。

问题解决

跨机器访问[Win7访问Linux下Django服务]:

问题现象一:直接无法访问:

# 9000端口仅仅监测本机的连接
omc@omc-virtual-machine:~$ netstat -an|grep 9000

问题定位: Django启动方式错误

问题解决: 重新启动Django项目

错误的:python3 manage.py runserver 9000   【少了定向IP】
正确的:python3 manage.py runserver 0.0.0.0:9000

问题现象二:Win7下访问Linux下的Django和Celery结合的项目

问题解决:

更改settings.py里面的ALLOWED_HOSTS配置后重启服务

ALLOWED_HOSTS = ['*']  # 所有都可以访问

问题二:

问题现象: AttributeError: module 'CeleryTest' has no attribute 'celery'

问题定位: 1.未进入到项目内,所以无法找到命名为celery的文件

2.项目内没有一个命名为celery.py的文件

Celery学习---Celery 与django结合实现计划任务功能的更多相关文章

  1. Celery学习--- Celery 最佳实践之与django结合实现异步任务

    django 可以轻松跟celery结合实现异步任务,只需简单配置即可 同步执行和异步执行 注意:即使Celery的任务没有执行完成,但是已经创建了任务ID.可以利用前台的定时任务发送Ajax异步请求 ...

  2. Celery学习--- Celery操作之定时任务

    celery支持定时任务,设定好任务的执行时间,celery就会定时自动帮你执行, 这个定时任务模块叫celery beat 文件定时执行任务 项目前提: 安装并启动Redis celery_Sche ...

  3. Celery学习--- Celery在项目中的使用

    可以把celery配置成一个应用,注意连接文件命名必须为celery.py 目录格式如下 项目前提: 安装并启动Redis CeleryPro/celery.py   [命名必须为celery.py] ...

  4. Celery学习---Celery 分布式队列介绍及安装

    Celery介绍和基本使用 Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以考虑使用celery, ...

  5. celery学习笔记1

    生产者消费者模式 在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据,这些数据由另一个模块来负责处理(此处的模块是广义的,可以是类.函数.线程.进程等).产生数据的模块,就形象地称为生产 ...

  6. celery 学习笔记 01-介绍

    celery 学习笔记 01-介绍 celery 是 python 中的常用的任务队列框架,经常用于异步调用.后台任务等工作.celery 本身以 python 写,但协议可在不同的语言中实现,其它语 ...

  7. celery学习笔记2

    1.定义: Celery是一个异步的任务队列(也叫做分布式任务队列) 2.工作结构 Celery分为3个部分 (1)worker部分负责任务的处理,即工作进程(我的理解工作进程就是你写的python代 ...

  8. Celery学习笔记

    转载请注明出处:点我 我的第一篇博客!嘿嘿! 在公司实习,接触到的第一个项目就用到了Celery,之前是完全没有接触过Celery这玩意,然后花了点时间仔细的研究了下怎么用.在学习过程中也遇到了些问题 ...

  9. celery学习之入门

    Celery 简介 Celery 是一个简单.灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具.它是一个专注于实时处理的任务队列,同时也支持任务调度. broker:一个消息 ...

随机推荐

  1. google glog 使用方法

    #include <glog/logging.h> int main(int argc,char* argv[]) { google::ParseCommandLineFlags(& ...

  2. CSS3设置Table奇数行和偶数行样式

    table:.myTable tr:nth-child(even){ //偶数行 background:#fff;}.myTable tr:nth-child(odd){ //奇数行 backgrou ...

  3. 编写高质量JavaScript代码的68个有效方法

    简介: <Effective JavaScript:编写高质量JavaScript代码的68个有效方法>共分为7章,分别涵盖JavaScript的不同主题.第1章主要讲述最基本的主题,如版 ...

  4. 问题集录--从初级java程序员到架构师,从小工到专家

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希 ...

  5. 设置input标签placeholder字体颜色

    有时会遇到这样的需求,输入框的默认提示文字与用户输入的文字不同. <input className="city" placeholder="城市"/> ...

  6. centos 6.5安装docker

    安装linux,需要系统内核为3.x以上,如果centos版本为7以下,先升级系统内核 1.关闭selinux setenforce 0 sed -i '/^SELINUX=/c\SELINUX=di ...

  7. 安装ftp服务

    1.首先判断你服务器上是否安装了vsftpd 2.安装vsftpd 3.配置文件/etc/vsftpd/vsftpd.conf 禁止匿名用户登录,把YES改为NO,默认为YES 限制ftp用户跳出家目 ...

  8. Template parse errors: The pipe 'translate' could not be found

    问题描述: 基于Ionic最新的super模板,创建的项目,在自己改造成懒加载机制后,原本正常的项目出现问题了,提示模板内部使用的翻译管道找不到,如图: 模板内部使用的翻译管道代码,我确定没有问题, ...

  9. 初学者使用MySQL_Workbench 6.0CE创建数据库和表,以及在表中插入数据。

    标签: mysqlworkbench数据库 2013-10-09 20:17 19225人阅读 评论(14) 收藏 举报  分类: mysql(1)  版权声明:本文为博主原创文章,未经博主允许不得转 ...

  10. Python__random库基本介绍

    random库是使用随机数的Python标准库 从概率论角度来说,随机数是随机产生的数据(比如抛硬币),但时计算机是不可能产生随机值,真正的随机数也是在特定条件下产生的确定值,只不过这些条件我们没有理 ...