[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