/ / Czy obsługiwane są potoki o wieloprocesorowych nazwach (FIFO)? - python, multiprocessing, named-pipes

Czy wieloprocesorowe obsługuje nazwane potoki (FIFO)? - python, multiprocessing, named-pipes

Wieloprocesorowość Kobza i Kolejka są oparte na anonimowych rurach, czy multiprocessing Pythona zapewnia nazwane potoki (FIFO)?

Odpowiedzi:

1 dla odpowiedzi № 1

Nie ma wbudowanej obsługi wieloplatformowej abstrakcji nazwanych potoków multiprocessing.

Jeśli zależy Ci tylko na systemie Unix lub tylko na systemie Windows, możesz oczywiście utworzyć potoki nazwane ręcznie. W przypadku systemu Unix mkfifo jest w stdlib. W systemie Windows musisz użyć ctypes lub cffilub biblioteki innej firmy, takiej jak win32api zadzwonić CreateFile z odpowiednimi argumentami.

Próbując streścić różnice semantycznemiędzy tymi dwoma jest dość bolesne, prawdopodobnie dlatego stdlib nie próbuje tego zrobić. (Na przykład, nazwy nazwane potoków są niestabilne, a potoki nazw posix są trwałe).

Oto trywialny przykład Uniksa:

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 dla odpowiedzi nr 2

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

Opakowanie dla powiązanego gniazda lub nazwanego potoku Windows, które nasłuchuje na adres connections.address, jest adresem używanym przez związany socket lub nazwaną potokę obiektu listenener.