Python - 中断线程


在多线程程序中,新线程中的任务可能需要停止。这可能有多种原因,例如:(a) 不再需要任务的结果或 (b) 任务的结果误入歧途或 (c) 应用程序正在关闭。

可以使用 threading.Event 对象来停止线程。事件对象管理可以设置或不设置的内部标志的状态。

当创建新的 Event 对象时,其标志未设置为启动 (false)。如果它的 set() 方法被一个线程调用,则可以在另一个线程中检查它的标志值。如果发现属实,您可以终止其活动。

例子

在此示例中,我们有一个 MyThread 类。它的对象开始执行 run() 方法。主线程Hibernate一段时间,然后设置一个事件。直到检测到事件,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()

当您执行此代码时,它将产生以下输出-

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