В настоящее время я работаю над кластером SGE, и у меня есть код, который отправляет множество заданий, записанных в python, параллельно.
Вывод в конце моего кода представляет собой набор файлов, содержащих числовые данные. Каждое задание python выполняет некоторые вычисления и затем по очереди выводит их в каждый файл. Для вывода в файл мой код считывает данные в файле, добавляет к ним то, что он вычислил, а затем выводит обратно в файл.
Моя проблема заключается в следующем; поскольку все задания выполняются параллельно, и все задания вносят свой вклад в каждый из выходных файлов; мои работы противоречат друг другу. Я часто получаю ошибки, касающиеся несовместимых размеров файлов и тому подобное. Я считаю, что иногда два задания пытаются прочитать файл в одно и то же время и конфликтуют.
У меня такой вопрос: при параллельном запуске (потенциально много) нескольких заданий, каждое из которых вносит свой вклад в один и тот же файл несколько раз, есть ли хороший способ убедиться, что они не пытаются записать в файл одновременно? Существуют ли какие-либо решения этой проблемы pythoni c или SGE?
Моя новая идея заключалась в том, чтобы иметь txt-файл, содержащий 1
или 0
, указывающий, осуществляется ли доступ к файлу в данный момент, и что задание будет записывать в файл только тогда, когда значение установлено на 0
, и будет изменять значение на 1
во время вывода. Это плохая практика? / Тупая идея?