Что произойдет, если два скрипта python захотят записать в одном файле?

У меня есть конвейер, который в какой-то момент разбивает работу на различные подпроцессы, которые делают то же самое параллельно. Таким образом, их вывод должен идти в один и тот же файл.

Слишком рискованно говорить, что все эти процессы должны записываться в один и тот же файл? Или python пытается и повторяет попытку, если видит, что этот ресурс занят?

Ответ 1

В целом, это не очень хорошая идея, и мы будем очень осторожны, чтобы поправиться. Поскольку записи должны быть сериализованы, это может также негативно повлиять на масштабируемость.

Я бы рекомендовал писать отдельные файлы и слияние (или просто оставить их в виде отдельных файлов).

Ответ 2

Это зависит от системы. В Windows ресурс заблокирован, и вы получаете исключение. В Linux вы можете записать файл с двумя процессами (записанные данные могут быть смешаны)

В идеале в таких случаях вы должны использовать семафоры для синхронизации доступа к общим ресурсам.

Если использование семафоров слишком тяжело для ваших нужд, тогда единственной альтернативой является запись в отдельные файлы...

Изменить. Как указано в более позднем сообщении, диспетчер ресурсов является еще одной альтернативой для обработки параллельных авторов

Ответ 3

Лучшим решением является реализация диспетчера ресурсов (сценариста), чтобы не открывать один и тот же файл дважды. Этот менеджер мог использовать механизмы синхронизации потоков (threading.Lock), чтобы избежать одновременного доступа на некоторых платформах.

Ответ 4

Как о том, чтобы все разные процессы записывали свой вывод в очередь и имели один процесс, который считывает эту очередь и записывает в файл?