Celery可以从配置文件启动。
现在在同个目录有下面三个文件:
tasks.py:
# 定义任务
from celery import task
@task
def add(x, y):
return x + y
test.py:
# 调用任务
from tasks import add
add.delay(1,2)
celeryconfig.py:
# 配置文件
CELERY_IMPORTS = ('tasks')
CELERY_IGNORE_RESULT = False
BROKER_URL = 'redis://127.0.0.1:6379/9'
CELERY_RESULT_BACKEND = 'mongodb'
CELERY_RESULT_BACKEND_SETTINGS = {
"host": "127.0.0.1",
"port": 27017,
"taskmeta_collection": "stock_taskmeta_collection",
}
使用命令celery worker -P gevent --loglevel=info
,默认使用当前文件夹下的celeryconfig.py启动celery worker。
再运行一次test.py,调用任务tasks.add。
这时可以看到celery输出:
[2018-05-21 10:41:13,077: INFO/MainProcess] Received task: tasks.add[ae439ae8-5959-439f-9152-d65eebee3abf]
[2018-05-21 10:41:13,107: INFO/MainProcess] Task tasks.add[ae439ae8-5959-439f-9152-d65eebee3abf] succeeded in 0.015999999828636646s: 3
由于配置backend到mongodb,现在可以在mongodb.celery.celery_taskmeta集合中,看到一条新的数据:
{
"_id" : "38eda55b-5447-408e-a82c-a99b6aa34bb7",
"status" : "SUCCESS",
"result" : "3",
"date_done" : ISODate("2018-05-21T02:35:33.660Z"),
"traceback" : "null",
"children" : "[]"
}
可见,计算完成时间和结果已经储存好了。
与#3中方式对比
本篇中的方式利用了celery提供的功能来进行结果储存,优势在于配置简单,且定时等工作可以完全内聚在celery中,和后台管理程序分离。
缺点是,celery不保存任务开始时间和任务名。