如何处理celery中的TimeoutError
我使用了几个 task.apply_async()
和 task.get()
来异步调用服务器,并让客户端等待结果。这些任务返回结果的时间不固定,有时需要1分钟,有时需要3分钟才能完成。
我想要检测任务是否出现了 TimeError
,因为服务器可能宕机了,导致请求无法处理或发送。使用 apply_async
调用时设置超时是处理这些错误的唯一方法吗?还有其他方法吗?
2 个回答
1
- 工作端
在工作端处理时间时,可以使用软限制和硬限制:http://celery.readthedocs.org/en/latest/userguide/workers.html#time-limits
如果任务超出了这个时间限制,就会抛出一个错误。然后你可以捕捉到这个异常:
try:
task.apply_async().get()
except TimeLimitExceeded as err:
pass
- 客户端
在客户端捕捉时间错误时,可以使用 get(timeout=value) 方法,如下所述。
try:
task.apply_async().get(timeout=90)
except TimeoutError as err:
pass
1
答案在于调用的 get 方法。它有一个参数是 get(timeout=value)。
http://celery.readthedocs.org/en/latest/reference/celery.result.html