gpt4 book ai didi

python 线程连接没有正常发生

转载 作者:太空宇宙 更新时间:2023-11-04 10:48:00 26 4
gpt4 key购买 nike

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. 现在,我将 2 个不同的数据条目放入队列中(使用 broadcast_event 函数)
  3. 现在,在 stop 方法中,有一个注释行,我在其中将线程连接回主程序。

但是,当我取消注释 self.join 行时,程序挂起并永远运行。但是,如果我删除 self.join,它会完美运行。

我想了解我尝试使用连接的方式是否存在问题。

最佳答案

你的问题是两个线程使用同一个队列。死锁场景是:

  1. 主线程在t1.stop()中发送'shutdown'
  2. t2q
  3. 中读取 'shutdown'
  4. 主线程加入 t1,它永远等待新消息。

您可以通过创建 2 个队列或先执行两个 shutdown 消息然后执行两个加入来解决此问题。

关于python 线程连接没有正常发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com