Skip to main content
 首页 » 编程设计

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

2025年05月04日25lyhabc

我有一个 API 调用到我正在使用 celery 进行一些处理的服务器。 celery 的输出被传回客户端。

我用过

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() 的情况下使用 celery 何时将 celery 任务生成的结果发送给客户端?

我知道 get()会将我的 API 调用转换为同步调用,但我有什么替代方法? celery 的真正用途是什么?有没有其他方法可以更改我的 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."