我可以在celery任务对象上有本地回调吗?

时间:2018-11-15 13:06:24

标签: celery celery-task

我准备了一个小演示-它旨在在Celery上调用耗时的函数。我要执行

import itertools
import time
import logging

from celery.result import AsyncResult

from myproj.tasks.time_consuming_thing import time_consuming_thing

log: logging.Logger = logging.getLogger()


def log_the_result(result):
    print("Result: %r" % result)

def main():
    for i in itertools.count(0):
        log.info("About to schedule a task: #%i", i)

        result: AsyncResult = time_consuming_thing.delay()
        result.then(callback=log_the_result)

        time.sleep(10)


if __name__ == "__main__":
    logging.basicConfig()
    logging.getLogger("").setLevel(logging.INFO)
    main()

实际上似乎发生的是……什么都没有:

我可以看到工作人员正在返回一个值,但是该值似乎永远不会返回给消费者。永远不会调用回调函数。

我该怎么做才能用结果的返回值调用回调函数?

1 个答案:

答案 0 :(得分:1)

要使用class ScanUser[T <: User] { ... } class PrintUser[T <: User] { ... } 功能,您必须使用aio, threading, or gevent

对于gevent,您将使用类似的东西(从上面的github线程复制并粘贴):

then
相关问题