我有一个对服务器的API调用,我正在那里使用celele进行一些处理。芹菜的输出被传递回客户端。
我使用
som = task_async_get_cached_session.delay('session_123')
print 'before'
result = som.get(timeout=1)
print 'after'
我看了celery -l INFO
,任务成功了succeeded in 0.024465521s: {data: {session_123: something}}
但我的客户没有得到回复,我暂停了,现在我得到了The operation timed out. (<class 'celery.exceptions.TimeoutError'>)
当我查看日志跟踪时,只打印了before
。我的问题是,当您希望将从芹菜任务生成的结果发送给客户端时,如何在没有get()
的情况下使用芹菜?
我知道get()
会将我的API调用转换为同步调用,但我有什么替代方案?芹菜的真正用途是什么?是否有其他方法可以将API更改为异步行为?
使用celery.result设计一个函数来检查任务状态并获得结果。
from celery.result import AsyncResult
def get_result(my_work):
work = AsyncResult(my_work.id)
if work.ready(): # check task state: true/false
try:
result = work.get(timeout=1)
return result
except:
pass
return "Please waiting result."