Python 在多个控制台中调试多个处理队列

Python 在多个控制台中调试多个处理队列,python,multithreading,debugging,multiprocessing,Python,Multithreading,Debugging,Multiprocessing,我希望在多个控制台中与多处理队列数据交互,如下所示: #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 con

我希望在多个控制台中与多处理队列数据交互,如下所示:

#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"

但这不起作用。我遗漏了什么?

如果我正确理解了您的意图,这就不起作用了。我假设“console”是指Python交互式提示符

  • 启动“控制台1”,这是一个操作系统进程。您在其中创建一个
    队列
    对象,并在其上放置一些内容

  • 启动“console 2”,这是一个操作系统进程,不是通过
    进程
    对象创建的。您在其中创建了一个
    队列
    对象,但该对象与在“控制台1”中创建的对象不同。你试图从它那里得到一些东西,但是你什么也得不到,因为它上面什么也没有放。(它们都导入
    test.py
    这一事实与此无关。)

  • 队列
    对象并不是用来作为与
    进程
    对象无关的进程的通信通道。例如,请参见以下示例:


    现在介绍如何使用
    process
    创建第二个进程。通过
    process
    创建的
    p
    流程与原始流程共享相同的
    q
    队列。

    谢谢!那么,有没有办法在p.start()之后看到“q”的值呢。在我的应用程序中,p.start()运行服务器,这样我就不能使用同一个交互式控制台。您可以打开一个日志文件并将值写入该文件。服务器通常就是这样工作的。
    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()