多处理是否支持命名管道(FIFO)?

时间:2018-04-28 08:35:31

标签: python multiprocessing named-pipes

多处理的管道队列基于匿名管道,Python的multiprocessing是否提供命名管道(FIFO)?

2 个答案:

答案 0 :(得分:2)

multiprocessing中对命名管道的跨平台抽象没有内置支持。

如果你只关心Unix,或者只关心Windows,你当然可以手动创建命名管道。对于Unix,mkfifo位于stdlib中。对于Windows,您必须使用ctypescffi或第三方库(如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是侦听器对象的绑定套接字或命名管道使用的地址。