我希望与多个控制台中的多处理队列数据进行交互,如下所示:
#test.py
import multiprocessing
global queue
queue = multiprocessing.Queue()
#PYTHON CONSOLE 1
from test import queue
queue.put("This is console 1")
#PYTHON CONSOLE 2
from test import queue
print queue.get() #"This is console 1"
但这不起作用。我错过了什么?
答案 0 :(得分:1)
如果我理解你正在尝试做什么,这是行不通的。我假设通过" console"你的意思是Python交互式提示。
您启动"控制台1",这是一个操作系统进程。你在其中创建一个Queue
对象,并在其上放置一些东西。
您启动"控制台2",这是一个不是通过Process
对象创建的操作系统进程。您在其中创建了一个Queue
对象,但这是一个不同的对象,而不是在"控制台1"中创建的对象。你试图从中得到一些东西,但你什么也没得到,因为没有任何东西被放在上面。 (他们都导入test.py
的事实无关紧要。)
Queue
对象并不意味着通过Process
对象充当与相关的进程的通信通道。例如,请参阅documentation:
from multiprocessing import Process, Queue
def f(q):
q.put([42, None, 'hello'])
if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
print q.get() # prints "[42, None, 'hello']"
p.join()
现在如何使用Process
创建第二个流程。通过p
创建的Process
进程与原始进程共享相同的q
队列。