2013-03-30 16 views
10

Recentemente sto studiando gli strumenti di programmazione parallela in Python. E qui sono due principali differenze tra os.pipe e multiprocessing.Pipe (nonostante occasione vengono utilizzati)Python os.pipe vs multiprocessing.Pipe

  1. os.pipe è unidirezionale, multiprocessing.Pipe è bidirezionale.;
  2. Quando mettere le cose nel tubo/ricevere le cose da tubo, os.pipe utilizza codifica/decodifica, mentre multiprocessing.Pipe utilizza salamoia/deserializzazione

Voglio sapere se la mia comprensione è corretta, e c'è un'altra differenza? Grazie.

risposta

6

Credo che tutto ciò che hai dichiarato sia corretto.

Su Linux, os.pipe è solo un'interfaccia Python per l'accesso ai tubi POSIX tradizionali. Su Windows, è implementato usando CreatePipe. Quando lo chiami, ottieni indietro due descrittori di file ordinari. È unidirezionale, e tu scrivi solo byte ad esso su un'estremità che vengono bufferizzati dal kernel finché qualcuno non legge dall'altra parte. È piuttosto di basso livello, almeno per gli standard di Python.

multiprocessing.Pipe oggetti sono molto più interfaccia di alto livello, implementata utilizzando oggetti multiprocessing.Connection. Su Linux, questi sono in realtà costruiti su socket POSIX, piuttosto che su pipe POSIX. Su Windows, sono costruiti utilizzando l'API CreateNamedPipe. Come hai notato, gli oggetti multiprocessing.Connection possono inviare/ricevere qualsiasi oggetto picklable e gestiscono automaticamente il processo di decapaggio/annullamento, piuttosto che occuparsi solo di byte. Sono in grado di essere sia bidirezionali che unidirezionali.