我试图在同一进程内的两个线程之间传递数据,主线程在一个单独的类中生成一个新线程。我试图使用multiprocessing.Queue
对象传递一个字符串。在
我不明白为什么第二个线程看不到队列中的数据。在
在主类.py在
if(__name__ == '__main__'):
# Create the threads
itemInterestThread = NewItemInterestHelper("Item Interest Thread")
# Start the Item Interest Thread
itemInterestThread.run()
time.sleep(1)
print "Adding item\n"
itemInterestThread.addToQueue("Neat Thing")
time.sleep(1)
print "Adding item\n"
itemInterestThread.addToQueue("Neat Thing2")
print "Sleeping for 5 seconds"
time.sleep(5)
NewItemInterestHelper.py在
^{pr2}$
首先,你的问题混淆了线程和多处理。他们不是一回事。如果你把你的问题更新得更清楚一点也许会更好。线程化是在同一个进程中完成的(至少在概念上是这样),因此将共享所有全局变量和状态。当进行多处理时,这些进程将彼此独立,因此不共享全局变量和状态。相反,每个进程将实例化自己的进程。在
因此,类变量(实际上是全局变量)将不会在主进程和辅助进程之间共享。不同的进程将有自己的队列和锁,从头创建。在
但是,如果锁和队列属于对象而不是类,则在生成辅助进程时将复制它们。这样他们就可以分享足够的内部信息来做你想让他们做的事情。因此,如果您更改
NewItemInterestHelper
使锁和队列成为动态对象的一部分,它应该可以工作:现在,因为辅助进程中的队列和锁是从主进程中的队列和锁的副本创建的。这样,它们将共享足够多的内部构件,从而分别被视为相同的队列和锁。在
另一方面,我假设这是一个简化的例子,因为在本文中,根本不需要互斥锁。不需要保护对队列的写入不受来自队列的读取,因为这是由底层系统自动处理的。在
相关问题 更多 >
编程相关推荐