gpt4 book ai didi

python - 如何在python中超时功能,超时不到一秒

转载 作者:行者123 更新时间:2023-12-03 20:23:20 25 4
gpt4 key购买 nike

问题规范:
我正在搜索日志文件的大量行,并将这些行分配给组,以便使用 re.match() 存储的正则表达式(RegExses)功能。不幸的是,我的一些正则表达式太复杂了,Python 有时会让自己陷入回溯 hell 。因此,我需要通过某种超时来保护它。
问题:

  • re.match ,我正在使用,是 Python 的函数,正如我在 StackOverflow 上的某个地方发现的那样(我真的很抱歉,我现在找不到链接 :-( )。运行 Python 的库时很难中断线程。对于这个原因线程不在游戏中。
  • 因为评估 re.match函数花费的时间相对较短,我想用这个函数分析大量的行,我需要一些不会花费太长时间执行的超时函数(这使得线程更不适合,初始化新线程需要很长时间)和 可以设置为小于一秒 .
    由于这些原因,请在此处回答 - Timeout on a function call
    在这里 - Timeout function if it takes too long to finish带装饰器(警报 - 1 秒或更多)不在讨论范围内。

  • 我今天早上一直在寻找这个问题的解决方案,但我没有找到任何令人满意的答案。

    最佳答案

    解决方案:

    我刚刚修改了此处发布的脚本:Timeout function if it takes too long to finish .

    这是代码:

    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(error_message)

    def wrapper(*args, **kwargs):
    signal.signal(signal.SIGALRM, _handle_timeout)
    signal.setitimer(signal.ITIMER_REAL,seconds) #used timer instead of alarm
    try:
    result = func(*args, **kwargs)
    finally:
    signal.alarm(0)
    return result
    return wraps(func)(wrapper)
    return decorator

    然后你可以像这样使用它:
    from timeout import timeout 
    from time import time

    @timeout(0.01)
    def loop():
    while True:
    pass
    try:
    begin = time.time()
    loop()
    except TimeoutError, e:
    print "Time elapsed: {:.3f}s".format(time.time() - begin)

    哪个打印
    Time elapsed: 0.010s

    关于python - 如何在python中超时功能,超时不到一秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56852522/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com