我正在调用Python中的一个函数,我知道它可能会停止并迫使我重新启动脚本.
如何调用该函数或我将其包装成什么,以便如果它花费的时间超过5秒,脚本会取消它并执行其他操作?
我有一个shell脚本循环遍历包含URL的文本文件:我想访问并截取屏幕截图.
这一切都做得很简单.该脚本初始化一个类,该类在运行时创建列表中每个站点的屏幕截图.有些站点需要非常长的时间来加载,有些站点可能根本没有加载.所以我想将screengrabber-function包装在一个超时脚本中,False如果它在10秒内无法完成,则使函数返回.
我满足于最简单的解决方案,也许设置一个异步计时器,无论在函数内部实际发生什么,它将在10秒后返回False?
过去已经进行了许多尝试以在Python中添加超时功能,以便在指定的时间限制到期时,等待代码可以继续.不幸的是,以前的配方要么允许运行功能继续运行并消耗资源,要么使用特定于平台的线程终止方法来终止该功能.这个wiki的目的是为这个问题开发一个跨平台的答案,许多程序员不得不为各种编程项目解决这个问题.
#! /usr/bin/env python
"""Provide way to add timeout specifications to arbitrary functions.
There are many ways to add a timeout to a function, but no solution
is both cross-platform and capable of terminating the procedure. This
module use the multiprocessing module to solve both of those problems."""
################################################################################
__author__ = 'Stephen "Zero" Chappell <Noctis.Skytower@gmail.com>'
__date__ = '11 February 2010'
__version__ = '$Revision: 3 $'
################################################################################
import inspect
import sys
import time
import multiprocessing
################################################################################
def add_timeout(function, limit=60):
"""Add a …Run Code Online (Sandbox Code Playgroud) 尽管我尽了最大努力进行优化,但我有一个可能需要很长时间才能执行的正则表达式。我希望能够在它停止的情况下中断它,并继续执行程序的其余部分
其他语言(如 C#)具有用于正则表达式执行的超时属性,我想知道为什么 Python 3 似乎没有相同的方法。
Python 3 内部有一个最大执行时间,因为很长一段时间后,正则表达式中止并继续执行。这是真的吗?
我想在 python 3 上分析这个问题并使用独立于平台的方法(我看到装饰器仅在带有信号的 NIX 操作系统上工作......)
也许答案是使用关于如何在 Python 中停止函数的更通用方法来管理这个问题,例如如何在 Python 中向函数添加超时或使用超时停止 Python 中的函数。
我怎样才能实现这样的超时?
我一直无法找到记录的方法来为实际工作的初始连接设置超时。我不是在问“查询超时”,而是在数据库服务器完全关闭或无法访问的情况下初始连接尝试的超时,并且根本没有响应。默认情况下,此类连接似乎在 255 秒后超时 - 有没有办法设置更短的超时?
编辑:为清楚起见,我应该在这里重申堆栈:
我在for循环中运行一个函数,如下所示:
for element in my_list:
my_function(element)
Run Code Online (Sandbox Code Playgroud)
由于某种原因,某些元素可能导致函数进入非常长的处理时间(甚至可能是一些我无法真正追踪其来源的无限循环).所以我想添加一些循环控制来跳过当前元素,如果它的处理例如需要超过2秒.如何才能做到这一点?
python ×6
timeout ×3
asynchronous ×1
linux ×1
process ×1
pyodbc ×1
python-3.x ×1
python-re ×1
regex ×1
sql-server ×1
unixodbc ×1