可能重复:
Python函数调用超时
我想实现当函数花了超过90秒完成时它应该在超时时立即返回.有没有办法实现这一目标?
def abc(string):
import re
if re.match('some_pattern', string):
return True
else:
return False
abc('some string to match')
Run Code Online (Sandbox Code Playgroud)
编辑
请下载此测试文件.我创建了一个线程类,并在发生超时错误时在线程内引发异常.但线程仍然存在,因为它i am still alive :)甚至在异常后打印.为什么异常不会强制线程停止?
我编辑了我的帖子以使用更简单的jcollado的想法.
该multiprocessing.Process.join方法,你可以使用这样的超时参数:
import multiprocessing as mp
import time
import logging
import re
logger = logging.getLogger(__name__)
def abc(string, result, wait = 0):
time.sleep(wait)
result.put(bool(re.match('some_pattern', string)))
if __name__ == '__main__':
logging.basicConfig(level = logging.DEBUG,
format = '%(asctime)s: %(message)s',
datefmt = '%H:%M:%S', )
result = mp.Queue()
proc = mp.Process(target = abc, args = ('some_pattern to match', result))
proc.start()
proc.join(timeout = 5)
if proc.is_alive():
proc.terminate()
else:
logger.info(result.get())
proc = mp.Process(target = abc, args = ('some string to match', result, 20))
proc.start()
proc.join(timeout = 5)
if proc.is_alive():
logger.info('Timed out')
proc.terminate()
else:
logger.info(result.get())
Run Code Online (Sandbox Code Playgroud)
产量
12:07:59: True
12:08:04: Timed out
Run Code Online (Sandbox Code Playgroud)
请注意,您将在5秒内收到"超时"消息,即使abc('some string',20)完成时间大约需要20秒.