在某段时间后继续进行for循环

时间:2017-03-21 02:33:16

标签: python python-2.7 timeout

如果给定的迭代花费的时间超过一定时间,您将如何移动到for循环的下一次迭代?代码看起来应该是这样的。

for i in range(0, max_iterations):
       timer function
       call to api

如果api尚未完成,则定时器函数将用于强制for循环继续到下一次迭代。它应该在120秒内完成该迭代。如何写入定时器功能?提前谢谢!

1 个答案:

答案 0 :(得分:0)

这仅在非阻塞API调用或具有超时的API调用中才真正可行。例如,如果您使用套接字库,则可以使用socket.setblocking(0)来使套接字API调用成为非阻塞的。

就您而言,您已经说过您正在使用Yandex API。这似乎是基于https的JSON,因此您不妨尝试urllib2.urlopen()。此方法接受超时。这比使用非阻塞调用更容易,因为urlopen()会简单地放弃并在超时时间过后返回错误。

使用某些注释中建议的螺纹将为您提供部分解决方案。由于无法停止由线程模块启动的线程,因此您发起的所有未完成的API调用在python解释器的生命周期内都将处于阻塞状态,并且这些线程将永远不会退出。

如果确实使用线程模块解决了此问题,则应使所有运行API的线程都调用守护程序线程thread.setDaemon(True),以便在退出主线程时,解释器停止。否则,直到所有API调用完成并返回后,解释器才会退出。