【发布时间】:2016-03-18 20:57:15
【问题描述】:
第一个问题,所以请温柔。
我正在使用 python。 当创建一个命名管道到一个 c++ windows 程序时使用
PIPE = open(r'\\.\pipe\NamedPipe','rb+',0)
作为全局,我可以从管道读取/写入管道。
def pipe_writer():
PIPE.write(some_stuff)
def pipe_reader():
data = struct.unpack("byte-type",PIPE.read(number_of_bytes),0)
pipe_writer()
pipe_reader()
这很好,可以从管道中收集数据并使用多个函数处理完整的数据,一个接一个的函数。
不幸的是,当我以序列化的方式从管道中提取数据时,我必须一点一点地处理数据。
我认为对数据进行排队就可以完成这项工作,所以我使用了多进程模块。
当我尝试多进程时,我能够创建管道并在打开管道后发送一次数据:
if __name__ == '__main__':
PIPE = open(r'\\.\pipe\NamedPipe','rb+',0)
PIPE.write(some_stuff)
当我尝试将.start() 函数作为进程并从管道中读取时,我收到一个错误,指出管道不存在或以错误的模式打开,这实际上不可能,因为它工作得很好当在函数上不使用 Process() 读取/写入它时,我可以写入它......即使它只有一次。
有什么建议吗?另外我认为我有点需要使用多进程,因为线程不起作用......可能......因为 GIL 和减慢速度。
【问题讨论】:
-
python或c++?对我来说,它看起来很纯粹python。不幸的是,使用c++标签,python专家可能会回避回答您的问题。 -
管道来自 c++ 程序,我正在工作 100% python 抱歉没有指定,第一个问题
-
如何打开管道?
pipe = (r'...', 'rb+', 0)只是创建了一个包含两个字符串和一个 int 的 3 元组...... -
因为我使用 PIPE = open(r'...', 'r+b', 0)。再次抱歉!让电脑上的代码在工作。也会有问题的编辑
-
如果我正确理解了您的问题,您将在一个进程中打开管道并尝试在另一个进程中使用它。在无法运行的 Windows 下,请参阅 rhodesmill.org/brandon/2010/…
标签: python multithreading pipe multiprocessing named-pipes