Что произойдет, если один и тот же файл будет считан и добавлен одновременно (программирование на Python)? - PullRequest
4 голосов
/ 10 января 2011

Я пишу сценарий, используя два отдельных потока, один из которых выполняет операцию чтения файла, а другой выполняет добавление, оба потока выполняются довольно часто.

У меня вопрос: если один поток прочитает файл, а другой находится в середине добавления строк, таких как «Это тест», в этот файл, что произойдет?

Я знаю, что если вы добавляете строку меньше размера буфера , независимо от того, как часто вы читаете файл в других потоках, в вашем файле никогда не будет неполной строки, такой как "This i" читать файл, я имею в виду ОС будет либо: добавить "Это тест" -> прочитать информацию из файла; или: прочитать информацию из файла -> добавить «Это тест» в файл; и такого никогда не произойдет: добавьте «Это я» -> прочитать информацию из файла -> добавить «это тест».

Но если «Это тест» достаточно велик (при условии, что это строка больше, чем буфер ), ОС не может выполнить добавление в одну операцию, поэтому добавление будет разделить на две части: сначала добавьте «This i» в файл, затем добавьте «sa test», так что в такой ситуации, если мне случится прочитать файл в середине всей операции добавления, я получу такой результат: append «Это я» -> прочитать информацию из файла -> добавить «тест», что означает, что я могу прочитать файл, который содержит неполную строку?

1 Ответ

1 голос
/ 10 января 2011

Если вы беспокоитесь об этом, просто попросите потребителя найти специальный символ (конечная строка сработает), чтобы он знал, что не было неполной записи.Таким образом, ваш производитель (тот, кто записывает данные в файл) может выводить частичные данные, но потребитель (одно чтение из файла) будет знать, что он получил только частичную запись.

Существует ли причина, по которой вы не используетеТРУБА вместо файла?И есть ли причина, по которой вы используете многопоточность?На самом деле вы ничего не получите, за исключением, может быть, простоты в кодировании, но в IMO у вас также могут быть отдельные процессы, тогда вы можете получить выгоду от этой модели.

Добавлено: К сожалению, этот ввод / вывод некак Python обрабатывает вещи, но как ОС обрабатывает вещи.Все, что вы сказали о том, что беспокоитесь о буфере, является правдой.

http://docs.python.org/library/functions.html#open

Я бы попытался выяснить, какой у вас размер буфера, и даже не знаю, какпроверять.В любом случае я использую OSX.

...