基于计时器从内部终止python线程

时间:2016-12-02 06:01:08

标签: python multithreading

我试图通过多个论坛解决这个问题,但仍然没有得到答案的解决方案。 我会尝试尽可能具体地说明我在寻找什么。 我有一个用例,我需要让一个线程在一段时间后终止自己。我不想在主线程中使用.join(timeout = x)因为据我所知不会终止线程。我希望在线程中实现这个定时事件,它应该在它终止之前做一些清理和更新。 JFYI:我不能在run方法中使用循环来检查状态。我的需求是在run方法中调用目标函数。

class MyThread(Thread):
    def __init__(self):
        Thread.__init__(self)
        self.timer = Timer(5.0, self.timeout)

    def run(self):
        self.timer.start()
        # call the target function which runs

     def timeout(self):
          # timeout code
          # If timeout has been reached then thread should do some internal cleanup and terminate thread here.

1 个答案:

答案 0 :(得分:0)

以下是使用eventlet.timeout的另一种方式。下面的target_functionThread.run块中的主要逻辑。当时间到了,它会抛出一个预定义的异常。您可以在cleanup函数中添加内部清理逻辑块。

from eventlet.timeout import Timeout
from eventlet import sleep


class TimeoutError(Exception):
    pass


def target_function(seconds=10):
    print("Run target functions ...")
    for i in range(seconds, -1, -1):
        print("Count down: " + str(i))
        sleep(1)


def cleanup():
    print("Do cleanup ...")

timeout = Timeout(seconds=5, exception=TimeoutError)
try:
    target_function(20)
except TimeoutError:
    cleanup()
finally:
    print("Timeout ...")
    timeout.cancel()

我希望它符合您的要求。