Я использую кластер компьютеров для параллельных вычислений.Мой домашний каталог является общим для всего кластера.На одной машине у меня есть код ruby, который создает скрипт bash, содержащий команду вычисления, и записывает скрипт, скажем, в ~ / q / каталог.Сценарии называются * .worker1.sh, * .worker2.sh и т. Д.
На других 20 машинах у меня запущено 20 кодов python (по одному на каждой машине), которые (постоянно) проверяют ~ / q/ directory и ищите задания, которые принадлежат этому компьютеру, используя код Python, подобный следующему:
jobs = glob.glob('q/*.worker1.sh')
[os.system('sh ' + job + ' &') for job in jobs]
Для некоторого дополнительного контроля код ruby создаст пустой файл, такой как workeri.start (i = 1..20) в каталоге q после того, как он запишет скрипт bash в каталог q, код python проверит этот «стартовый» файл перед запуском вышеуказанного кода.И в сценарии bash, если команда завершается успешно, сценарий bash создаст пустой файл, такой как 'workeri.sccuess', код python проверяет этот файл после запуска вышеуказанного кода, чтобы убедиться, что вычисление завершено успешно.Если python обнаружит, что вычисление завершилось успешно, он удалит файл 'start' в каталоге q, поэтому код ruby знает, что задание успешно завершено.После того, как сценарий 20 bash полностью завершен, код ruby создаст новый сценарий bash, а python прочитает и выполнит новые сценарии и т. Д.
Я знаю, что это не элегантный способ координировать вычисления, но я неЯ понял, что лучше общаться между разными машинами.
Теперь вопрос: я ожидаю, что 20 заданий будут работать параллельно.Общее время для завершения 20 заданий будет не намного больше, чем время для завершения одного задания.Тем не менее, кажется, что эти задания выполняются последовательно, а время намного дольше, чем я ожидал.
Я подозреваю, что отчасти это связано с тем, что несколько кодов читают и записывают один и тот же каталог одновременно, но система linux или pythonблокирует каталог и позволяет оперировать каталог только одному процессу.Это заставляет код выполняться по одному за раз.
Я не уверен, так ли это.Если я разделю скрипты bash на разные каталоги и позволю коду python на разных машинах читать и писать разные каталоги, решит ли это проблему?Или есть другие причины, вызывающие проблему?
Большое спасибо за любые предложения!Дайте мне знать, если я ничего не объяснил.
Дополнительная информация: мой домашний каталог находится в / home / my_group / my_home, вот информация о монтировании: / vol / my_group в / home /my_group тип nfs (rw, nosuid, nodev, noatime, tcp, timeo = 600, retrans = 2, rsize = 65536, wsize = 65536, addr = ...)
Я говорю постоянно проверять каталог q,что означает цикл Python, как это:
While True:
if 'start' file exists:
find the scripts and execute them as I mentioned above