【发布时间】:2013-04-16 12:12:21
【问题描述】:
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,它会完美运行。
我想了解我在尝试使用 join 时是否存在问题。
【问题讨论】:
标签: python multithreading