等待任务中外部web服务的结果
我需要编写一堆任务,其中每个任务需要查询外部Web服务。 Web服务始终以202接受状态回复,并将位置标头指向可以轮询结果的URI。此Web服务提供结果所用的时间可能从2秒到1分钟不等。我想知道什么是最好的方法来编程我的芹菜任务。现在,我发送请求并开始while循环,直到我成功轮询的结果,例如:等待任务中外部web服务的结果
while True:
result = poll_webservice()
if result:
break
else:
time.sleep(5)
[ continue with the rest of the task ]
这无疑作品看起来很简陋,我和我也阻止芹菜工人,直到结果被调查。有没有更好的方法?
我会考虑一个芹菜任务轮询202响应提供的位置。如果它完成了,那么它会处理它,否则它会在一段时间后重新排队(或它自己的一个副本)。
对于奖励积分,如果您有很多这些任务,那么您可以在每次回复未准备好时增加轮询之间的时间。
如何使用task.retry
?
@task(max_retries=100)
def poll_webservice_task(url):
result = poll_webservice(url)
if result:
return result
poll_webservice_task.retry(countdown=5)
也必须记住为无限制设置适当的'max_retries':'@task(max_retries = None)'。 – asksol
这就是要走的路。我没有意识到apply_async的'countdown'和'eta'参数。有了这些论点和使用子任务,我认为我可以很好地解决问题。感谢您的意见。 –
如果您正在调用* *真正的Web网页,脚本应该只在当它得到了一个答案 - 参见[深入Python SOAP页](http://diveintopython.org/soap_web_services/index.html )一些例子 – JMax
@JMax,有可能像http://docs.picloud.com/rest.html这样的东西,所以他不能这样做。 – hymloth
@hymloth:感谢您指出这个网址 – JMax