import threading
import Queue
q = Queue.Queue()
class Worker( threading.Thread ):
def __init__( self, q ):
threading.Thread.__init__( self )
self.q = q
def run( self ):
while True:
print '%s waiting for data' % self.getName()
data = self.q.get()
print '%s data fetched from queue %s' % ( self.getName(), data )
if data == 'shutdown':
print '%s shutting down in %s' % ( self.getName(), self )
return
print '%s received a message: %s' % ( self.getName(), data )
def stop( self ):
self.q.put( "shutdown" )
# self.join() # If I uncomment this line, then sometimes the program does not complete.
def broadcast_event( data ):
q.put( data )
t1 = Worker( q )
t2 = Worker( q )
t1.start()
t2.start()
broadcast_event( "first event" )
broadcast_event( "second event" )
t1.stop()
t2.stop()
我试图理解 python 中的线程,但我被困在多线程队列示例中。我正在尝试做的事情:-
- 使用单个队列对象创建 2 个线程
- 现在,我将 2 个不同的数据条目放入队列中(使用
broadcast_event
函数) - 现在,在 stop 方法中,有一个注释行,我将线程加入到主程序中。
但是,当我取消注释该self.join
行时,程序挂断并永远运行。但是,如果我删除self.join
,它会完美运行。
我想了解我如何尝试使用加入是否有问题。