我正在尝试复制 ZMQ 指南中描述的呼吸机/工人/水槽范例。我有与 ZMQ 示例中描述的相同的 Python Ventilator、相同的 C++ worker 和相同的 Python Sink。我想从一个主要的 Python 脚本启动呼吸机、工作程序和水槽,所以我在呼吸机和水槽周围创建了“类”包装器,这两个类都是 Python 模块“multiprocessing.Process”的子类。由于 C++ 是二进制文件,因此我使用 Python 的 subprocess.Popen 调用来启动它。
启动所有这些的顺序如下:
h = subprocess.Popen('test') # test is the name of the binary
time.sleep(1)
s = sinkObj.start()
time.sleep(1)
v = ventObj.start()
我发现当我像这样启动组件时没有数据通过系统。但是,如果我在自己的 shell 中启动 C++ 二进制文件,并且只从主 python 脚本启动 sinkObj 和 ventObj,它就可以正常工作。
如果这更像是一个 Python 问题而不是 ZMQ 问题,我提前道歉,但我没有遇到像 Python 子进程这样的问题。我也尝试过使用 os.system() 而不是子进程......但同样的问题。我把所有的代码放在这个网站上:https ://github.com/kkarrancsu/zmqtest 如果有人想测试一下。该 git 上有一个自述文件,它告诉您文件是什么。
关于为什么会发生这种情况的任何想法?
- - - - - - - - - - - - - 更新 - - - - - - - - - -
我发现,如果我创建一个简单地启动 C 二进制文件的 shell 脚本,并使用 os.system('run_the_shell_script') 调用该 shell 脚本,它就可以工作!所以这意味着我使用 subprocess.Popen(...) 的方式有问题,但似乎无法确定问题所在。我尝试使用 shell=True 标志,但它仍然挂起......