超时后多线程杀死线程-python 2.7



我正在运行一个异步程序,我启动的每个线程,我都希望它是

有一个超时,如果它没有完成功能,它将停止并杀死自己(或者其他线程会杀死它)

func(my_item, num1, num2, num3, timeout):
    calc = num1+num2
    # something that takes long time(on my_item)
for item in my_list:
        if item.bool:
            new_thread = threading.Thread(target=func, (item, 1, 2, 3, item.timeout))
            new_thread.start()

现在我希望主线程继续启动新线程,但我也希望每个线程都有一个超时,这样线程就不会永远继续下去。

我使用的是windows而不是UNIX,所以我无法运行SINGLRM

谢谢!

杀死线程是一种糟糕的做法,对于长期运行的函数来说,最好检查状态标志并退出它自己,而不是由外部因素突然杀死线程。一个简单的检查,用time.time()记录函数调用的开始时间,并每隔一段时间进行比较,即:

def func(x, y, timeout):
    start = time.time()
    while time.time() < (start + timeout):
        # Do stuff

或者添加一个方法,该函数可以每隔一段时间调用该方法,当超过超时时会引发一个异常,您的长时间运行的函数可以在try/except块中捕获该超时以清理并退出线程:

def check_timeout(start_time, timeout):
    if time.time() > (start_time + timeout):
        raise TimeoutException
try:
    # Stuff
    check_timeout(start_time, timeout)
    # Bit more stuff
    check_timeout(start_time, timeout)
    # Bit more stuff
    check_timeout(start_time, timeout)
    # Bit more stuff
    # All done!
    return "everything is awesome"
except TimeoutException:
    # Cleanup and let thread end

我推荐这个线程作为一本好书:有什么方法可以杀死Python中的线程吗?

相关内容

  • 没有找到相关文章

最新更新