Celery:如何在调用远程任务时添加回调函数(使用send_task)

时间:2014-06-23 13:31:06

标签: python django multiprocessing celery

您可以使用celery按名称调用任务,该任务在不同的进程中注册(或者甚至在不同的机器上注册):

celery.send_task(task_name, args=args, kwargs=kwargs)

http://celery.readthedocs.org/en/latest/reference/celery.html#celery.Celery.send_task

我现在希望能够添加一个回调,该回调将在任务完成后立即执行,并且将在调用任务的进程中执行。

我的设置

我有一台服务器A,它运行一个django驱动的网站,我使用基本的芹菜设置,如here所述。我没有在服务器A上运行芹菜工人。

然后是服务器B,它运行(几个)芹菜工人。

到目前为止,这个设置似乎工作得很好。我可以在服务器A上发送任务,然后在远程服务器B上执行。

问题

唯一的问题是,我无法添加回调函数。

在它说的文档中,您可以通过提供后续任务来添加回调。所以我可以这样做:

@celery.task
def result_handler(result):
    print "YEAH"

celery.send_task(task_name, args=args, kwargs=kwargs, link=result_handler.s())

但这意味着,我必须在服务器A上启动一个注册任务“result_handler”的工作人员。即使我这样做,那么处理程序将在工作程序生成的进程中调用,而不是调用任务的django进程。

我能想出的唯一解决方案是无限循环,如果任务准备就绪,则每2秒检查一次,但我认为应该有一个更简单的解决方案。

0 个答案:

没有答案