python - 一定时间后继续 for 循环

标签 python python-2.7 timeout

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

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

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

最佳答案

这只有通过非阻塞 API 调用或带超时的 API 调用才能真正实现。例如,如果您使用的是套接字库,则可以使用 socket.setblocking(0) 使套接字 API 调用成为非阻塞。

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

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

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

关于python - 一定时间后继续 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917431/

相关文章:

python - 用 pandas 计算每月的支出总额

linux - Python 和 Skype4Py 中 skype.Attach() 中的段错误

python - 在上下文管理器 __enter__() 中捕获异常

asynchronous - Dart :io clean up Futures that timeout? 是如何实现的

java - Websphere:设置连接池超时被忽略

python - 派林特 W0108 : Lambda may not be > necessary (unnecessary-lambda)

python - 如何使用 PIL 的 ImageFont 类获取字体像素高度?

data.plot(x=data.timestamp, 样式 =".-") 上的 Python 错误

Python Pandas.Series.asof : Cannot compare type 'Timestamp' with type 'struct_time'

Php max_execution_time 被忽略