Что произойдет, если один и тот же файл будет прочитан и добавлен одновременно (программирование на питоне)?

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

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

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

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

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

    Есть ли причина, по которой вы не используете PIPE вместо файла? И есть ли причина, по которой вы используете потоки? Вы действительно ничего не выигрываете, кроме, может быть, простоты в кодировании, но у ИМО вы также можете иметь отдельные процессы, тогда вы можете получить выигрыш от этой модели.

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

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

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