Два процесса чтения / записи в один и тот же файл Python - PullRequest
16 голосов
/ 09 июля 2010

У меня есть один процесс, который читает из файла (используя file.read()), и один процесс, который пишет в тот же файл (file.write()). Проблема в том, что это не работает - я не получаю ошибок, но они не могут работать одновременно. Я попытался сделать операции чтения и записи неблокирующими, а затем очистить поток следующим образом:

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

Я совершенно не понимаю? Как выполнить запись и чтение в один файл из разных процессов?

Ответы [ 4 ]

18 голосов
/ 09 июля 2010

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)

Это прекрасно работает для меня.

8 голосов
/ 09 июля 2010

Есть ли причина использовать общий файл?Межпроцессное взаимодействие, вероятно, намного проще, используя сокеты .

3 голосов
/ 09 июля 2010

Посмотрите на этот Блокировка чтения-записи класс:

и на этой статье о блокировке и резьбонарезании:

1 голос
/ 27 июля 2018

Еще один отличный способ сделать это - использовать трубу

В этом примере создается конвейер, который возвращает объект чтения и записи. Затем один процесс записывает данные в канал, используя средство записи, а другой - читает из него средство чтения.

Python os.pipe (): https://docs.python.org/3/library/os.html#os.pipe

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...