我有一个芹菜任务调用另一个远程任务(它在另一个芹菜应用程序,在另一个服务器..).当我尝试.get()从我的任务中的远程任务的结果,如下所示:
@app.task()
def my_local_task():
result_from_remote = app.send_task('remote_task', [arg1, arg2])
return result_from_remote.get()
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
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))
Run Code Online (Sandbox Code Playgroud)
基本上我希望我的任务是"同步" - 我希望它等待远程任务的结果,我很好.
我可以告诉芹菜它没关系吗?当然有链接的解决方案,除了链接远程任务是不可能的.调用远程任务的唯一方法是使用app.send_task,它返回一个AsyncResult,而我无法链接,因为我需要任务函数本身.
jpt*_*nta 19
如果您知道自己在做什么是安全的,那么这个片段会发出警告:
from celery.result import allow_join_result
with allow_join_result():
result.get()
Run Code Online (Sandbox Code Playgroud)
如果你希望你的任务是同步的,你可以使用ready()来保持循环:
import time
while not result_from_remote.ready():
time.sleep(5)
return result_from_remote.get()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4950 次 |
| 最近记录: |