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

时间:2014-04-06 12:44:30

标签: 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 console 1"

但这不起作用。我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果我理解你正在尝试做什么,这是行不通的。我假设通过" console"你的意思是Python交互式提示。

  1. 您启动"控制台1",这是一个操作系统进程。你在其中创建一个Queue对象,并在其上放置一些东西。

  2. 您启动"控制台2",这是一个不是通过Process对象创建的操作系统进程。您在其中创建了一个Queue对象,但这是一个不同的对象,而不是在"控制台1"中创建的对象。你试图从中得到一些东西,但你什么也没得到,因为没有任何东西被放在上面。 (他们都导入test.py的事实无关紧要。)

  3. 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队列。