在一定时间后继续 for 循环



如果给定迭代花费的时间超过一定时间,您将如何移动到 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()只会放弃并在超时到期后返回错误。

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

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

相关内容

  • 没有找到相关文章

最新更新