celery的使用

celery:芹菜
-是什么,用来干什么?
-用python写的执行定时任务和异步任务的框架

-执行异步任务:
1 创建任务:tasks.py
2 把任务添加到队列中:add_task.py
3 开启work,执行任务
-用命令:celery -A tasks worker -l info
-在windows下:celery worker -A tasks -l info -P eventlet
4 查看任务执行结果:task_result.py
-多任务结构
-重点:执行work的时候:celery worker -A celery_task -l info -P eventlet

-定时任务执行
-指定一个时间点执行任务
apply_async(args=[4, 3], eta=task_time)
-每天某个时间执行
详情看代码
-启动一个beat,负责调度,添加任务:celery beat -A celery_task -l info
-启动work执行任务:celery worker -A celery_task -l info -P eventlet
-django中使用
-上面讲的多任务结构方式

 1 ## Django中使用Celery
 2 
 3 在项目目录下创建celeryconfig.py
 4 import djcelery
 5 djcelery.setup_loader()
 6 CELERY_IMPORTS=(
 7     'app01.tasks',
 8 )
 9 #有些情况可以防止死锁
10 CELERYD_FORCE_EXECV=True
11 # 设置并发worker数量
12 CELERYD_CONCURRENCY=4
13 #允许重试
14 CELERY_ACKS_LATE=True
15 # 每个worker最多执行100个任务被销毁,可以防止内存泄漏
16 CELERYD_MAX_TASKS_PER_CHILD=100
17 # 超时时间
18 CELERYD_TASK_TIME_LIMIT=12*30
19 
20 在app01目录下创建tasks.py
21 from celery import task
22 @task
23 def add(a,b):
24     with open('a.text', 'a', encoding='utf-8') as f:
25         f.write('a')
26     print(a+b)
27 
28 视图函数views.py
29 from django.shortcuts import render,HttpResponse
30 from app01.tasks import add
31 from datetime import datetime
32 def test(request):
33     # result=add.delay(2,3)
34     ctime = datetime.now()
35     # 默认用utc时间
36     utc_ctime = datetime.utcfromtimestamp(ctime.timestamp())
37     from datetime import timedelta
38     time_delay = timedelta(seconds=5)
39     task_time = utc_ctime + time_delay
40     result = add.apply_async(args=[4, 3], eta=task_time)
41     print(result.id)
42     return HttpResponse('ok')
43 
44 settings.py
45 INSTALLED_APPS = [
46     ...
47     'djcelery',
48     'app01'
49 ]
50 
51 ...
52 
53 from djagocele import celeryconfig
54 BROKER_BACKEND='redis'
55 BOOKER_URL='redis://127.0.0.1:6379/1'
56 CELERY_RESULT_BACKEND='redis://127.0.0.1:6379/2'
View Code
原文地址:https://www.cnblogs.com/xuqidong/p/12122301.html