Lau*_*ewa 5 python timeout python-2.7
如果给定的迭代花费的时间超过一定的时间,您将如何移动到 for 循环的下一次迭代?代码应该是这样的。
for i in range(0, max_iterations):
timer function
call to api
Run Code Online (Sandbox Code Playgroud)
如果 api 尚未完成,计时器函数将用于强制 for 循环继续进行下一次迭代。对于该迭代,它应该在 120 秒内工作。定时器函数将如何编写?先感谢您!
小智 0
这只有通过非阻塞 API 调用或具有超时的 API 调用才真正可能实现。例如,如果您正在使用套接字库,则可以使用socket.setblocking(0)使套接字 API 调用成为非阻塞。
就您而言,您说过您正在使用 Yandex API。这似乎是通过 https 的 JSON,因此您可能希望尝试一下urllib2.urlopen()。该方法接受超时。这比使用非阻塞调用更容易,因为urlopen()在超时到期后将简单地放弃并返回错误。
按照某些评论中的建议使用线程将为您提供部分解决方案。由于无法停止使用 threading 模块启动的线程,因此您发起的所有未完成的 API 调用都将在 python 解释器的生命周期中保持阻塞状态,并且这些线程永远不会退出。
如果你确实使用线程模块来解决这个问题,你应该让所有运行API调用的线程成为守护线程,thread.setDaemon(True)这样当你的主线程退出时,解释器就会停止。否则,在所有 API 调用完成并返回之前,解释器不会退出。
| 归档时间: |
|
| 查看次数: |
871 次 |
| 最近记录: |