【发布时间】:2011-09-22 12:16:48
【问题描述】:
我需要编写一堆任务,其中每个任务都需要查询外部 Web 服务。 Web 服务始终以 202 ACCEPTED 状态回复,并在 Location 标头中指向可以轮询结果的 URI。此 Web 服务交付结果所需的时间可能从 2 秒到 1 分钟不等。我想知道编写芹菜任务的最佳方法是什么。现在我发送请求并开始一个while循环,直到我成功轮询结果,例如:
while True:
result = poll_webservice()
if result:
break
else:
time.sleep(5)
[ continue with the rest of the task ]
虽然这确实有效,但对我来说似乎很粗糙,而且我阻止 celery worker 直到结果被轮询。有没有更好的方法?
【问题讨论】:
-
如果您正在调用一个真正的 web 服务,脚本应该只在它得到答案时继续 - 参见Dive into Python SOAP page 的一些例子
-
@JMax,有docs.picloud.com/rest.html之类的可能,所以他不能那样做。
-
@hymloth: 感谢您指出这个网址