python中断一个命令,如果它花费的时间比它应该的要长

标签 python

<分区>

Possible Duplicate:
Timeout on a Python function call
How to timeout function in python, timout less than a second

我在 for 循环中运行一个函数,如下所示:

for element in my_list:
    my_function(element)

出于某种原因,某些元素可能会导致函数进入非常长的处理时间(甚至可能是一些我无法真正追踪到它来自何处的无限循环)。所以我想添加一些循环控制来跳过当前元素,如果它的处理时间超过 2 秒。如何做到这一点?

最佳答案

我会阻止最明显的答案 - 使用 signal.alarm() 和异步引发异常以跳出任务执行的警报信号处理程序。理论上它应该工作得很好,但实际上 cPython 解释器代码不能保证处理程序在您想要的时间范围内执行。信号处理可能会延迟 x 字节码指令,因此在您明确取消警报后(在 try block 的上下文之外)仍可能引发异常。

我们经常遇到的一个问题是,在超时代码完成后会引发警报处理程序的异常。

由于线程控制的方式不多,我依赖进程控制来处理必须超时的任务。基本上,要点是将任务交给子进程,如果任务花费的时间太长,则终止子进程。 multiprocessing.pool不是那么复杂 - 所以我有一个用于该级别控制的自制池。

关于python中断一个命令,如果它花费的时间比它应该的要长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14652012/

相关文章:

python - 在 Anaconda 安装后运行 pyinstaller 导致 ImportError : no Module named 'pefile'

python - 操作系统错误 : [Errno 12] Cannot allocate memory when using python multiprocessing Pool

python - Scapy Dot11ReassoReq

python - 如何获取类成员的类型注释?

python - 均匀混合两个元素列表(负载平衡)

python - 如何将 base64 图像存储为 GAE 数据存储中的文件

python - SQLAlchemy,以惯用的 Python 方式隔离和重试可序列化的事务

python - 如何安装和使用PyXB? 'pxbgen' 无法识别

python - 正确使用 Qthread 子类化有效,更好的方法吗?

python - 覆盖 DRF 中序列化程序的数据属性