Python 简明教程
Python - Interrupting a Thread
在 Python 中中断线程是多线程编程中的一个常见需求,其中线程的执行需要在特定条件下终止。在多线程程序中,可能需要停止新线程中的任务。这可能是由于多种原因,例如任务完成、应用程序关闭或其他外部条件。
在 Python 中,可以使用 threading.Event 或在线程本身内设置终止标志来中断线程。这些方法使你能有效地中断线程,确保适当释放资源并且线程干净地退出。
Thread Interruption using Event Object
中断线程的直接方法之一是使用 threading.Event 类。此类允许一个线程向另一个线程发出信号,表示发生了特定事件。以下是你可以使用 threading.Event 实现线程中断的方式:
Example
在此示例中,我们有一个类 MyThread。它的对象开始执行 run() 方法。主线程休眠一段时间,然后设置一个事件。直至检测到事件,run() 方法中的循环才会继续。只要检测到事件,循环就会终止。
from time import sleep
from threading import Thread
from threading import Event
class MyThread(Thread):
def __init__(self, event):
super(MyThread, self).__init__()
self.event = event
def run(self):
i=0
while True:
i+=1
print ('Child thread running...',i)
sleep(0.5)
if self.event.is_set():
break
print()
print('Child Thread Interrupted')
event = Event()
thread1 = MyThread(event)
thread1.start()
sleep(3)
print('Main thread stopping child thread')
event.set()
thread1.join()
执行此代码时,它将生成以下 output -
Child thread running... 1
Child thread running... 2
Child thread running... 3
Child thread running... 4
Child thread running... 5
Child thread running... 6
Main thread stopping child thread
Child Thread Interrupted
Thread Interruption using a Flag
中断线程的另一种方法是使用 flag ,该线程会定期检查该线程。此方法涉及在线程对象中设置一个标志属性,并在线程的执行循环中定期检查其值。
Example
此示例演示了如何在 Python 多线程程序中使用标志来控制和停止正在运行的线程。
import threading
import time
def foo():
t = threading.current_thread()
while getattr(t, "do_run", True):
print("working on a task")
time.sleep(1)
print("Stopping the Thread after some time.")
# Create a thread
t = threading.Thread(target=foo)
t.start()
# Allow the thread to run for 5 seconds
time.sleep(5)
# Set the termination flag to stop the thread
t.do_run = False
执行此代码时,它将生成以下 output -
working on a task
working on a task
working on a task
working on a task
working on a task
Stopping the Thread after some time.