繁体   English   中英

多处理程序支持命名管道(FIFO)吗?

[英]Does multiprocessing support named pipes (FIFO)?

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

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()

class multiprocessing.connection.Listener([地址[,家庭[,待办事项[,authkey]]]])

绑定套接字或Windows命名管道的包装程序,正在“监听”连接。address是侦听器对象的绑定套接字或命名管道要使用的地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM