问题描述
我有一个celery任务,它调用另一个 remote 任务(该任务在另一台celery应用程序的另一台服务器上.).当我尝试像这样从我的任务中获取远程任务的结果时:
I have a celery task that calls another remote task (it's on a different celery app, in another server..).When I try to .get() the result of that remote task from within my task like this:
@app.task()
def my_local_task():
result_from_remote = app.send_task('remote_task', [arg1, arg2])
return result_from_remote.get()
我收到此错误:
RuntimeWarning: Never call result.get() within a task! See http://docs.celeryq.org/en/latest/userguide/tasks.html#task-synchronous-subtasks
In Celery 3.2 this will result in an exception being
raised instead of just being a warning.
warnings.warn(RuntimeWarning(E_WOULDBLOCK))
基本上,我希望我的任务是同步的"-我希望它等待远程任务的结果,我可以接受.
Basically I want my task to be "synchronous" - I want it to wait for the result of the remote task, and i'm ok with it.
我可以告诉芹菜吗?当然有链的解决方案,除了不可能链远程任务.调用远程任务的唯一方法是使用app.send_task,它返回一个AsyncResult,并且由于需要任务功能本身,所以无法链接.
Can I tell celery it's ok?There is the solution of chaining of course, except it's impossible to chain remote tasks. The only way to call remote tasks is using app.send_task, which returns an AsyncResult, and that I can't chain as I need the task function itself..
推荐答案
如果您希望您的任务是同步的,则可以使用 ready()
来保持循环:
If you want your task to be synchronous, you can use ready()
to hold a loop:
import time
while not result_from_remote.ready():
time.sleep(5)
return result_from_remote.get()
这篇关于从celery任务中调用async_result.get()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!