[Python] Read bloccanti su pipe.

Manlio Perillo manlio_perillo a libero.it
Dom 24 Ago 2008 21:36:31 CEST


Listemessaggi CoPlast ha scritto:
> Ciao a tutti.
> 
> Se creo una named pipe (su linux)   mkfifo mio_path   e la apro   
> mio_file = open("mio_path", "r")   il programma rimane in attesa che 
> qualcuno invii qualcosa a quella pipe.
> Ora se invio qualcosa ad esempio banalmente   echo 1 > mio_path   allora 
> il programma supera l'istruzione open e va alle successive. Quì trova 
> dei cicli while contenenti delle  mio_file.read()  ed ora continua 
> all'infinito dentro la while anche se la pipe è vuota. Quando c'è 
> qualcosa nella pipe la legge e svuota la pipe ma poi continua nel loop 
> infinito restituendo niente dalle read.
> Se non ho capito male in C sono le read ad essere bloccanti (a meno di 
> specifare diversamente nella open del C). La cosa mi interesserebbe (le 
> read bloccanti intendo), esiste un modo per farlo con python?
> 

Leggiti un buon libro sulla programmazione in ambiente UNIX/POXIX.

La soluzione è impostare il descrittore di file in modalità non 
bloccante ed usare select/poll per essere notificati quando c'è qualcosa 
da leggere.

Questo tipo di programmazione non è banale.
Twisted la rende abbastanza più semplice da gestire.

> 
> Matteo.


Manlio Perillo


Maggiori informazioni sulla lista Python