用于获取结果表单任务的django celery get()

时间:2014-04-20 02:35:58

标签: python django asynchronous celery

我有一个API调用服务器,我正在使用芹菜进行一些处理。芹菜的输出传递给客户。

我用过

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。我想问一下如果你想把celery任务生成的结果发送给客户端,如何使用没有get()的芹菜?

我知道get()会将我的API调用转换为同步,但我有什么替代方案?芹菜的真正用途是什么?有没有其他方法可以更改我的API以表现异步?

1 个答案:

答案 0 :(得分:1)

使用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."