多处理的管道和队列基于匿名管道,Python的multiprocessing
是否提供命名管道(FIFO)?
答案 0 :(得分:2)
multiprocessing
中对命名管道的跨平台抽象没有内置支持。
如果你只关心Unix,或者只关心Windows,你当然可以手动创建命名管道。对于Unix,mkfifo
位于stdlib中。对于Windows,您必须使用ctypes
或cffi
或第三方库(如win32api
)使用正确的参数调用CreateFile
。
尝试抽象两者之间的语义差异是非常痛苦的,这可能是stdlib没有尝试这样做的原因。 (例如,Windows命名管道是易失性的; posix命名管道是永久性的。)
这是一个简单的Unix示例:
import multiprocessing
import os
def child():
with open('mypipe', 'rb') as p:
print(p.read())
def main():
try:
os.mkfifo('mypipe')
except FileExistsError:
pass
multiprocessing.Process(target=child).start()
with open('mypipe', 'wb') as p:
p.write(b'hi')
os.remove('mypipe')
if __name__ == '__main__':
main()
答案 1 :(得分:1)
class multiprocessing.connection.Listener([address [,family [,backlog [,authkey]]]])
绑定套接字或Windows命名管道的包装器,它正在“侦听”connections.address是侦听器对象的绑定套接字或命名管道使用的地址。