我在 python 中编写了一个生产者线程,我想在设置某个事件时停止它的执行。我不知道如何使用threading.Event
这个目的。所以,我自己写了一些代码:-
我使用了一个self.shouldStop
默认设置为 False 的变量。每当我希望停止生产者线程的执行时,我设置p.shouldStop
为 True
import Queue
import threading
import time
class ProducerThread( threading.Thread ):
def __init__( self, q ):
super( ProducerThread, self ).__init__()
self._q = q
self.shouldStop = False
def run( self ):
for i in range( 5 ):
if self.shouldStop is True:
return
self._q.put( i )
class ConsumerThread( threading.Thread ):
def __init__( self, q ):
super( ConsumerThread, self ).__init__()
self._q = q
def run( self ):
while True:
data = self._q.get()
if data == 'Stop':
print 'returning from the thread as I got %s message' % data
return
print "%s got %s. Sleeping for %s seconds. %s" % ( self.getName(), data, data, time.time() )
time.sleep( data )
print "%s woke up from sleep after %s seconds %s" % ( self.getName(), data, time.time() )
def stop( self ):
self._q.put( "Stop" )
if __name__ == '__main__':
q = Queue.Queue( 1 )
p = ProducerThread( q )
t = ConsumerThread( q )
p.start()
t.start()
p.shouldStop = True
p.join()
t.stop()
t.join()
我的问题是:
有没有更好的方法通过删除使用shouldStop
和使用来实现这一点threading.Event
?