第一个问题,所以请温柔一点。在
我用的是python。 创建指向c++windows程序的命名管道时
PIPE = open(r'\\.\pipe\NamedPipe','rb+',0)
作为全局,我可以读/写管道。在
^{pr2}$从管道中收集数据并使用多个函数(一个接一个函数)处理完整的数据是很好的。在
不幸的是,我必须一点一点地处理数据,因为我用几个函数以序列化的方式从管道中提取数据。在
我认为将数据排队就可以完成这项工作,所以我使用了多进程模块。在
当我尝试多处理时,我可以创建管道并在打开管道时发送一次数据:
if __name__ == '__main__':
PIPE = open(r'\\.\pipe\NamedPipe','rb+',0)
PIPE.write(some_stuff)
当我尝试.start()
将函数作为进程并从管道中读取时,我得到一个错误消息,即管道不存在或以错误的模式打开,如果不在函数上使用Process()对其进行读/写操作,则不会出现这种情况,我可以对其进行写入。。。即使只有一次。在
有什么建议吗?另外,我想我有点需要使用多进程,因为线程不能工作。。。可能。。。因为GIL和减慢速度。在
nanomsgpython包装器也可以在GitHub上的Nanomsg Python获得。在
您可以在Examples上看到示例。我想这个包装纸能满足你的需要。最好用这个代替原管道。它支持进程和TCP通信模式之间的IPC。在
而且它是跨平台的,它的基本实现是用C语言实现的,所以我想python和C进程之间的通信也是可能的。在
ZeroMQ和Nanomsg类似于networks/pipes/IPC,比原始管道、套接字等更易于使用。您的源代码更少,功能更多:双赢。在
谷歌的协议缓冲区允许您以语言中立的方式定义数据结构(消息),然后自动生成C++、Python、java或任何其他的源代码。此源代码定义了表示消息并将其转换为标准二进制格式的结构、类等。二进制数据就是通过ZeroMQ发送的数据。同样,你要写的源代码越少,功能就越多。在
<>这是将C++类变成Python的理想方法,反之亦然。在相关问题 更多 >
编程相关推荐