Celery可以從配置文件啟動鳄虱。
現(xiàn)在在同個目錄有下面三個文件:
tasks.py:
# 定義任務(wù)
from celery import task
@task
def add(x, y):
return x + y
test.py:
# 調(diào)用任務(wù)
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
悼凑,默認(rèn)使用當(dāng)前文件夾下的celeryconfig.py啟動celery worker菠红。
再運(yùn)行一次test.py雇逞,調(diào)用任務(wù)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刷后,現(xiàn)在可以在mongodb.celery.celery_taskmeta集合中的畴,看到一條新的數(shù)據(jù):
{
"_id" : "38eda55b-5447-408e-a82c-a99b6aa34bb7",
"status" : "SUCCESS",
"result" : "3",
"date_done" : ISODate("2018-05-21T02:35:33.660Z"),
"traceback" : "null",
"children" : "[]"
}
可見,計算完成時間和結(jié)果已經(jīng)儲存好了尝胆。
與#3中方式對比
本篇中的方式利用了celery提供的功能來進(jìn)行結(jié)果儲存丧裁,優(yōu)勢在于配置簡單,且定時等工作可以完全內(nèi)聚在celery中含衔,和后臺管理程序分離煎娇。
缺點(diǎn)是,celery不保存任務(wù)開始時間和任務(wù)名贪染。