如果卡住了90秒,如何从功能返回?

Aam*_*nan 11 python

可能重复:
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 :)甚至在异常后打印.为什么异常不会强制线程停止?

unu*_*tbu 6

我编辑了我的帖子以使用更简单的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秒.