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 でスレッドを理解しようとしていますが、マルチスレッド キューの例で行き詰まっています。私がやろうとしていること:-
- 1 つのキュー オブジェクトを使用して 2 つのスレッドを作成する
- ここで、2 つの異なるデータ エントリをキューに入れます (
broadcast_event
関数を使用) 。 - ここで、stop メソッドには、スレッドをメイン プログラムに戻すコメント行があります。
しかし、このself.join
行のコメントを外すと、プログラムがハングアップして永久に実行されます。ただし、を削除するとself.join
、完全に機能します。
結合を利用しようとしている方法に問題があるかどうかを理解したいです。