Многопроцессорные каналы и очередь основаны на анонимных каналах. Предоставляет ли multiprocessing Python именованные каналы (FIFO)?
Поддерживает ли многопроцессорность именованные каналы (FIFO)?
Ответы (2)
В multiprocessing нет встроенной поддержки кроссплатформенной абстракции именованных каналов.
Если вас интересует только Unix или только Windows, вы, конечно, можете создать именованные каналы вручную. Для Unix mkfifo находится в стандартной библиотеке. Для 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()
Listener? Потому что если так, то это было бы очень круто.
- person abarnert; 29.04.2018
sharedctypes, то он предназначен только для дерева процессов, созданного специально multiprocessing, но вы можете либо слегка злоупотреблять им, либо разветвлять код (обратите внимание, что документы multiprocessing ссылаются на исходный код, и, хотя там много это, большинство довольно просто…). Но это, вероятно, отдельный вопрос (и, вероятно, хороший).
- person abarnert; 29.04.2018
class multiprocessing.connection.Listener([адрес[, семья[, невыполненная работа[, ключ авторизации]]]])
Оболочка для связанного сокета или именованного канала Windows, которая «прослушивает» подключения. Адрес — это адрес, который будет использоваться связанным сокетом или именованным каналом объекта прослушивателя.
pipeотносится конкретно к анонимным каналам Unix, а тегfifo— к очередям и каналам в целом; тег для именованных каналов —named-pipes. - person abarnert   schedule 28.04.2018