Celery #4 使用配置文件

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不保存任务开始时间和任务名。

你可能感兴趣的:(Celery #4 使用配置文件)