目录
1.最基本的使用方法
主文件main.py+任务文件tasks.py
#main.py
#- * - coding: UTF - 8 -*-
from tasks import add
if __name__ =='__main__':
print 'task begin'
result=add.delay(4,1)
print 'task end'
print result
#tasks.py
#- * - coding: UTF - 8 -*-
from celery import Celery
from celery.schedules import crontab
import time
broker='redis://localhost:6379/0'
backend='redis://localhost:6379/1'
app = Celery('my_task', broker=broker,backend=backend)
@app.task
def add(x,y):
print "call func"
time.sleep(4)
return x+y
- task.py中定义了celery的配置、celery实例(app),以及定义了一个任务函数(add),其中任务函数使用了@app.task进行修饰,并模拟了长的处理时间(sleep(4))。
- main.py引入task.add,然后运行
运行
- 在终端控制台celery worker -A tasks -l info(暂称为celery控制台)
- run main.py(暂称为run控制台)
结果
#celery控制台
[2020-04-14 11:08:33,214: WARNING/MainProcess] celery@DESKTOP-A1E9NE5 ready.
[2020-04-14 11:11:31,029: INFO/MainProcess] Received task: tasks.add[c4628e55-6f93-44f0-a1c7-b34e8ac5e132]
[2020-04-14 11:11:31,030: WARNING/Worker-1] call func
[2020-04-14 11:11:35,049: INFO/MainProcess] Task tasks.add[c4628e55-6f93-44f0-a1c7-b34e8ac5e132] succeeded in 4.01900005341s: 5
#run控制台
task begin
task end
c4628e55-6f93-44f0-a1c7-b34e8ac5e132
第三行输出的是AsyncResult的对象ID,可以另开控制台查看(暂称为result控制台)
from celery.result import AsyncResult
from tasks import app
id='c4628e55-6f93-44f0-a1c7-b34e8ac5e132'
res=AsyncResult(id=id,app=app)
res.get()
res.status
查看结果如下:
>>>res.get()
5
>>>res.status
'SUCCESS'
2.采用模块化+配置文件
模块化的方法类似,只是将配置单独写成文件。
main.py
celery_app
--__init_.py
--celeryconfig.py
--task1.py
--task2.py
#celeryconfig.py
#- * - coding: UTF - 8 -*-
from datetime import timedelta
from celery.schedules import crontab
BROKER_URL='redis://localhost:6379/0'
CELERY_RESULT_BACKEND='redis://localhost:6379/1'
CELERY_IMPORTS=(
'celery_app.task1',
'celery_app.task2',
)
CELERY_TIMEZONE='Asia/Shanghai'
#__init__.py
#- * - coding: UTF - 8 -*-
from celery import Celery
app=Celery('demo')
app.config_from_object('celery_app.celeryconfig')
init还是对celery进行初始化
#task1.py
#- * - coding: UTF - 8 -*-
from celery_app import app
import time
@app.task
def add(x,y):
print "call add"
time.sleep(4)
return x+y
task1和task2比较类似,都是处理函数
#main.py
#- * - coding: UTF - 8 -*-
from celery_app import task1
from celery_app import task2
print 'app begin'
task1.add.delay(10,100)
task2.sub.delay(10,100)
print 'app end'
运行
- celery -A celery_app worker -l info
- run main.py
结果
- celery控制台
[2020-04-14 11:36:55,213: WARNING/MainProcess] celery@DESKTOP-A1E9NE5 ready.
[2020-04-14 11:38:22,125: INFO/MainProcess] Received task: celery_app.task1.add[1a0a30df-0b9b-4eb8-b6d5-483c210de2d7]
[2020-04-14 11:38:22,128: WARNING/Worker-1] call add
[2020-04-14 11:38:22,128: INFO/MainProcess] Received task: celery_app.task2.sub[71f13949-9711-43c6-b842-0f0dc2b0e8a0]
[2020-04-14 11:38:22,130: WARNING/Worker-1] call sub
[2020-04-14 11:38:26,144: INFO/MainProcess] Task celery_app.task1.add[1a0a30df-0b9b-4eb8-b6d5-483c210de2d7] succeeded in 4.01600003242s: 110
[2020-04-14 11:38:26,144: INFO/MainProcess] Task celery_app.task2.sub[71f13949-9711-43c6-b842-0f0dc2b0e8a0] succeeded in 4.0150001049s: -90
- run控制台
app begin
app end
- result控制台
id='1a0a30df-0b9b-4eb8-b6d5-483c210de2d7'
res=AsyncResult(id=id,app=app)
res.get()
110
res.status
'SUCCESS'
id2='71f13949-9711-43c6-b842-0f0dc2b0e8a0'
res2=AsyncResult(id=id2,app=app)
res2.get()
-90
总结
学习了celery的基本使用方法,包括基本配置以及结果查看方法;