- A+
所属分类:python
- 每次修改完TASK需要重启worker:python manage.py celery worker --loglevel=info
- 示例一的解决:将耗时的程序放到celery中执行
- 示例二的解决:使用celery定时执行
名词
- 任务task:就是一个Python函数
- 队列queue:将需要执行的任务加入到队列中
- 工人worker:在一个新进程中,负责执行队列中的任务
- 代理人broker:负责调度,在布置环境中使用redis,也可以使用rabbitmq等
使用
- 安装包(celery-with-redis对celery有版本需求,当执行安装celery-with-redis的时候如果版本不符合,会自动卸载celery并自动重装)
1 2 3 4 |
pip install celery pip install celery-with-redis pip install django-celery |
- 配置settings
1 2 3 4 5 6 7 8 9 10 11 |
INSTALLED_APPS = ( ... 'djcelery', } ... import djcelery djcelery.setup_loader() BROKER_URL = 'redis://127.0.0.1:6379/0' CELERY_IMPORTS = ('应用名称.task') |
- 在应用目录下创建task.py文件
1 2 3 4 5 6 7 8 9 10 11 |
import django #测试不加如这两行启动worker要报错,而且需要加在最前 django.setup() import time from celery import task @task def sayhello(): print('hello ...') time.sleep(20) print('world ...') |
- 迁移,生成celery需要的数据表
python manage.py migrate
- 启动Redis
sudo redis-server /etc/redis/redis.conf
- 启动worker
python manage.py celery worker --loglevel=info
- 调用语法
function.delay(parameters)
- 使用代码
1 2 3 4 5 |
from task import * def sayhello(request): sayhello.delay()#如果有参数sayhello.delay(x,y,z) return HttpResponse("hello world") |
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫
来自外部的引用: 1