2010-07-09 12 views
14

Tengo un proceso que está leyendo desde un archivo (usando file.read()) y un proceso que está escribiendo en el mismo archivo (file.write()). El problema es que no funciona, no recibo errores pero no pueden funcionar al mismo tiempo. He intentado hacer la lectura y escritura operaciones no-bloqueo y luego el lavado de la corriente, de la siguiente manera:Dos procesos de lectura/escritura en el mismo archivo Python

fcntl.fcntl(file, fcntl.F_SETFL, os.O_NONBLOCK) 
file.write(msg) 
file.flush() 

¿Estoy completamente malentendido? ¿Cómo se debe lograr escribir y leer en un archivo de diferentes procesos?

Respuesta

15

test1.py

import os 
f = open('txt.txt', 'a', os.O_NONBLOCK) 
while 1: 
     f.write('asd') 
     f.flush() 

test2.py

import os 
f = open('txt.txt', 'r', os.O_NONBLOCK) 
while 1: 
    print f.read(3) 

Esto funciona muy bien para mí.

+0

Sí, esto también funcionó bien para mí, gracias. – Andreas

+1

Tenga en cuenta que os.O_NONBLOCK no está disponible en Windows. – yoyo

8

¿Hay alguna razón para usar un archivo común? La comunicación entre procesos es probablemente mucho más fácil usando sockets.

+2

Sin duda tiene un punto. Inicialmente pensé en esta forma de hacerlo, pero cambié de parecer y busqué i/o archivo, y una vez que me encontré con el problema y empecé a luchar con él, llegué al punto en el que quería resolverlo: P. Gracias por la respuesta aún. – Andreas

Cuestiones relacionadas