本问题已经有最佳答案,请猛点这里访问。
我有一个shell脚本,它循环遍历一个包含URL:s的文本文件,我想访问这个文件并截屏。
所有这些都很简单。脚本初始化一个类,当运行该类时,该类将创建列表中每个站点的屏幕截图。有些站点需要非常、非常长的时间来加载,有些站点可能根本就没有加载。因此,我想将screengrabber函数封装在超时脚本中,如果它不能在10秒内完成,那么函数将返回False。
我满足于最简单的解决方案,也许设置一个异步计时器,无论函数内部实际发生什么,10秒后都会返回False ?
对于所有懒惰的人来说,他们喜欢使用库而不是复制和粘贴StackOverflow上的代码片段:pypi.python.org/pypi/timeout-decorator
在signal文档中描述了操作超时的过程。
基本思想是使用信号处理程序设置某个时间间隔的警报,并在计时器过期时引发异常。
注意,这只适用于UNIX。
下面是一个创建装饰器的实现(将以下代码保存为timeout.py)。
from functools import wraps
import errno
import os
import signal
class TimeoutError(Exception):
pass
def timeout(seconds=10, error_message=os.strerror(errno.ETIME)):
def decorator(func):
def _handle_timeout(signum, frame):
raise TimeoutError(e