python==2.7 djang==1.11.2 # 1.8, 1.9, 1.10应该都没问题 celery-with-redis==3.0 # 需要用到redis作为中间人服务(Broker) celery==3.1.25 # 安装上面的会自动安装 kombu==3.0.37 billiard==3.3.0.23 django-celery==3.2.2 # celery插件, 实现定时任务
celery>=4.0 对此环境会有报错, 暂不建议在此环境下使用
pip install django==1.11.2 celery-with-redis==3.0 django-celery==3.2.2
教程很多, 略
- Demo - Demo setting.py wsgi.py urls.py - app - migrations models.py views.py ...
settings.py
INSTALLED_APPS = ( ... ‘app‘, ‘djcelery‘,# django-celery 可以在admin后台定义定时任务, 开始前需要直接migrate ) BROKER_URL = ‘redis://127.0.0.1:6379/0‘ BROKER_TRANSPORT = ‘redis‘ CELERYBEAT_SCHEDULER = ‘djcelery.schedulers.DatabaseScheduler‘ # 数据库调度
Demo/Demo/celery.py
from __future__ import absolute_import import os from celery import Celery # set the default Django settings module for the ‘celery‘ program. os.environ.setdefault(‘DJANGO_SETTINGS_MODULE‘, ‘Demo.settings‘) from django.conf import settings # noqa app = Celery(‘Demo‘) # Using a string here means the worker will not have to # pickle the object when using Windows. app.config_from_object(‘django.conf:settings‘) app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) @app.task(bind=True) def debug_task(self): print(‘Request: {0!r}‘.format(self.request))
Demo/app/tasks.py
from Demo.celery import app @app.task def cus_task(*arg): print(‘This is a test task‘)
Demo/app/views.py
from django.shortcuts import render, HttpResponse from .tasks import cus_task def index(request): cus_task.delay() return HttpResponse("Test async task")
django
和celery
# django python manage.py runserver # celery celery -A Demo worker -l debug
celery
计划# 如上settings.py中的设置, 后执行 python manage.py migrate djcelery
# Djcelery模块列表 Crontabs # 同linux crontab Intervals # 间隔 Periodic tasks # 周期任务 Tasks Workers
配置一个periodic task
任务内容 app.tasks.cus_task
用crontab
或interval
设置每5s执行一次
celery -A Demo worker -l debug # 另一个窗口 celery -A Demo beat -l debug --max-interval=10 # 每10s扫描一次djcelery任务
nohup 后台启动
nohup celery -A Demo worker -l debug > abc.log &
原文:https://www.cnblogs.com/zhaoyingjie/p/9492697.html