繁体   English   中英

Python多进程队列get()块

[英]Python multiprocess Queue get() blocks

我写了一个小代理实用程序(tcp port-forwarder),现在尝试测试它。 所以我的测试:

def test_forwarding(self):
    route = self.config.routes[0]
    q = multiprocessing.JoinableQueue()

    proc_listen = multiprocessing.Process(
        target=lambda q: q.put(str(
            subprocess.Popen(["nc", "-l", str(route.sink[1])], stdout=subprocess.PIPE, shell=False).communicate()[0])),
        args=(q,))
    proc_listen.start()

    proc_write = multiprocessing.Process(
        target=lambda: subprocess.Popen("nc %s %s < ~/Workshop/port-forwarder/tests/test_data.txt" % route.source,
                                        stdout=subprocess.PIPE, shell=True))
    proc_write.start()

    proc_write.join(3)
    proc_write.terminate()

    proc_listen.join(3)
    proc_listen.terminate()
    q.join()
    self.assertEqual(open("test_data.txt", 'r').readline(), q.get())

但测试卡在断言的get()调用。 完全搞砸了,试过加入/终止等所有东西。 任何帮助将非常感激。

这里是github repo with sources: 在这里输入链接描述

如果你被get阻止,你可以

  1. 使用get_nowait()

  2. 或者使用empty()来检查边是否有一些元素。 如果不是空的那么得到,否则跳过

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM