关于python:在一段时间后停止一个线程

Stopping a thread after a certain amount of time

我想在一定时间后终止一些线程。这些线程将运行一个无限的while循环,在这段时间内,它们可以在一个随机的、大量的时间内暂停。线程的持续时间不能超过duration变量设置的时间。如何在持续时间设置的长度之后使线程停止。

1
2
3
4
5
6
def main():
    t1 = threading.Thread(target=thread1, args=1)
    t2 = threading.Thread(target=thread2, args=2)

    time.sleep(duration)
    #the threads must be terminated after this sleep


如果您不阻塞,这将工作。

如果你打算睡觉,你必须用这个活动来睡觉。如果你利用这个事件去睡觉,如果有人告诉你在"睡觉"的时候停下来,它就会醒来。如果使用time.sleep(),线程只有在唤醒后才会停止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import threading
import time

duration = 2

def main():
    t1_stop = threading.Event()
    t1 = threading.Thread(target=thread1, args=(1, t1_stop))

    t2_stop = threading.Event()
    t2 = threading.Thread(target=thread2, args=(2, t2_stop))

    time.sleep(duration)
    # stops thread t2
    t2_stop.set()

def thread1(arg1, stop_event):
    while not stop_event.is_set():
        stop_event.wait(timeout=5)

def thread2(arg1, stop_event):
    while not stop_event.is_set():
        stop_event.wait(timeout=5)


如果您希望在程序退出时停止线程(如您的示例所暗示的那样),那么让它们成为守护进程线程。

如果您希望线程在命令下死掉,那么您必须手工完成。有各种方法,但都涉及到在线程的循环中执行一个检查,以查看是否该退出(参见nix的示例)。