Multiprocessing.Queue 没有输出

No output from Multiprocessing.Queue

我正在尝试使用队列从多处理进程中获取变量。我试过查找为什么这不起作用,但我似乎无法找到我做错了什么。以下是我正在尝试做的简化版本。它仍然不打印任何东西。请帮忙。

import multiprocessing

q = multiprocessing.Queue()
def test(q):
    q.put(1)

p = multiprocessing.Process(target=test, args=(q,))
p.start()

while not q.empty():
    print(q.get())

以上过于简单化了。该程序的代码看起来更像下面的代码。完整版将使用 Open-CV2 对视频流进行模板匹配,如果找到匹配则发回。

import multiprocessing as mp

def test_process():
    q.put("image recognition results!")

q = mp.Queue()
p_script = mp.Process(target=test_process, args=(q,)) 



def image_recognition():
    global p_script
    if not p_script.is_alive(): 
        p_script = mp.Process(target=test_process, args=(q,))
        p_script.start()
    while not q.empty():
        print(q.get())

#This will be while true, with various breakout conditions
for _ in range(0, 50):
    image_recognition()

这对我来说似乎很不合理,但作为编程新手,我还没有想出更好的方法来 运行 在不阻止 GUI 事件的情况下进行图像识别。如果还有其他更好的路线,我洗耳恭听

以下是您需要如何在 Python 中使用多处理:

import multiprocessing

def test(q):
    q.put(1)

if __name__=="__main__":
    q = multiprocessing.Queue()
    p = multiprocessing.Process(target=test, args=(q,))
    p.start()

    while True:
        print(q.get())

请记住,每个新进程都会重新加载您的主文件,主文件会从头开始运行。任何您不想重复的内容都需要放在 __name__ 受保护的块中。这将打印“1”,然后等待永远不会出现的更多输入,因此您需要 Ctrl-C 它。