Python 在一定时间后继续for循环

Python 在一定时间后继续for循环,python,python-2.7,timeout,Python,Python 2.7,Timeout,如果给定的迭代花费的时间超过了一定的时间,您如何能够移动到for循环的下一个迭代?代码应该是这样的 for i in range(0, max_iterations): timer function call to api 如果api尚未完成,计时器函数将用于强制for循环继续到下一个迭代。对于该迭代,它应该在120秒内工作。如何编写计时器函数?提前谢谢你 这只有在非阻塞API调用或带有超时的API调用中才真正可能。例如,如果您正在使用套接字库,则可以使用socke

如果给定的迭代花费的时间超过了一定的时间,您如何能够移动到for循环的下一个迭代?代码应该是这样的

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

如果api尚未完成,计时器函数将用于强制for循环继续到下一个迭代。对于该迭代,它应该在120秒内工作。如何编写计时器函数?提前谢谢你

这只有在非阻塞API调用或带有超时的API调用中才真正可能。例如,如果您正在使用套接字库,则可以使用
socket.setblocking(0)
使套接字API调用无阻塞

在您的情况下,您已经说过您正在使用Yandex API。这似乎是https上的JSON,因此您可能希望尝试
urllib2.urlopen()
。此方法接受超时。这比使用非阻塞调用更容易,因为
urlopen()
将在超时过期后放弃并返回错误

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


如果您确实使用线程模块来解决这个问题,那么您应该让所有运行API调用的线程守护线程
thread.setDaemon(True)
,以便当主线程退出时,解释器停止。否则,在所有API调用完成并返回之前,解释器将不会退出。

此处的任何答案是否有帮助?我不知道时间。睡眠(秒)在这种情况下有多有用。如果我将time.sleep放在api调用之前,程序将只等待执行api调用。我没有将time.sleep放在api调用中的选项。什么意思?但是我仍然可以看到,它可能对你更有效。Jeremy Farrell在这里发布了一个答案,告诉你使用
time.sleep
来超时。但后来他意识到他误解了你的问题,于是改变了答案,把你和一些你可能觉得有用的信息联系起来。但随后他删除了修改后的答案。我将在下一篇评论中转载Jeremy的链接。Jeremy说:解决这个问题的一个方法是使用线程。有关在事件中使用线程的教程,请参见。一般的想法是在一个单独的线程上运行一个your调用,每隔一段时间检查一次结果。有关另一种选择,请参见以下答案:。