2013-03-30 14 views
10

Ostatnio studiuję narzędzia programowania równoległego w Pythonie. A oto dwa główne różnice między os.pipe i multiprocessing.Pipe (pomimo okazji są używane)Python os.pipe vs multiprocessing.Pipe

  1. os.pipe jest jednokierunkowy, multiprocessing.Pipe jest dwukierunkowy.;
  2. Kiedy oddanie rzeczy do rury/odbierać rzeczy z rurą, os.pipe wykorzystuje kodowanie/dekodowanie , natomiast multiprocessing.Pipe wykorzystuje marynatę/unpickle

Chcę wiedzieć, czy moje zrozumienie jest prawidłowe, i czy jest jeszcze inna różnica? Dziękuję Ci.

Odpowiedz

6

Uważam, że wszystko, co stwierdzono, jest poprawne.

W systemie Linux os.pipe to tylko interfejs Pythona do uzyskiwania dostępu do tradycyjnych potoków POSIX. W systemie Windows jest on zaimplementowany przy użyciu CreatePipe. Kiedy go wywołasz, otrzymasz dwa zwykłe deskryptory plików. Jest jednokierunkowy i po prostu zapisujesz do niego bajty na jednym końcu, które są zbuforowane przez jądro, dopóki ktoś nie odczyta z drugiej strony. Jest dość niski poziom, przynajmniej według standardów Pythona.

obiekty są znacznie bardziej zaawansowanym interfejsem, zaimplementowanym przy użyciu obiektów multiprocessing.Connection. W Linuksie są one zbudowane raczej na gniazdach POSIX, a nie na POSIX-ach. W systemie Windows są one tworzone przy użyciu interfejsu API CreateNamedPipe. Jak zauważyłeś, obiekty mogą wysyłać/odbierać dowolny możliwy do wybrania obiekt i automatycznie obsługują proces trawienia/rozpylania, a nie tylko zajmują się bajtami. Mogą być zarówno dwukierunkowe, jak i jednokierunkowe.