Поддерживает ли многопроцессорность именованные каналы (FIFO)? - PullRequest
0 голосов
/ 28 апреля 2018

Многопроцессорные Трубы и Очередь основаны на анонимных каналах. Предоставляет ли multiprocessing Python именованные каналы (FIFO)?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

class multiprocessing.connection.Listener ([address [, family [, backlog [, authkey]]]])

Оболочка для связанного сокета или именованного канала Windows, который «слушает» для соединений. Адрес - это адрес, который будет использоваться связанным сокетом или именованным каналом объекта слушателя.

0 голосов
/ 28 апреля 2018

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