LINUX.ORG.RU

python + внешний контроль программы

 ,


0

3

Задача. Есть числодробилка засылаемая на кластер, с которой нет возможности как-то взаимодействовать после запуска (python-скрипт дрёгающий HPC-библиотеку, в бесконечном цикле рассчитывающую эволюцию системы). Тем не менее, хочется некоторого уровня интерактивности (кроме тупой возможности прикончить таск из менеджера задач). В идеале, хочется что-то вроде debug-режима, по которому можно подсоединиться к таску, послать туда какие-то команды и/или иметь полноценную ipython-консоль с доступом во всем внутренностям скрипта. Как такое лучше реализовать?

$cast AntonI

★★★★★

Последнее исправление: thunar (всего исправлений: 2)

Самый простой и быстрый способ: научить python-скрипт обрабатывать сигналы и кидаться в него kill'ом.

Ещё один простой способ - на каждом шаге цикла читать команды из файла/сокета и реагировать на них. Тогда управлять всем этим хозяйством с помощью cat.

Но я не программист.

shell-script ★★★★★
()

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

Приложение поглядывает в файл, если там что то появилось оно это вычитывает и реагирует. В простейшем случае после каждой итерации по времени файл читается (и удаляется), содержимое тупо exec-ается. Дальше это можно завернуть в какие то красивые обертки .

AntonI ★★★★
()

Где-то видел именно готовое решение этой задачи на GitHub, года 2-3 назад. Думал, что сохранил в закладки, но поиском среди 2,000 своих закладок не нашёл.

emorozov
()
Ответ на: комментарий от thunar

Socket-файл могу создать, все операции с файлами уходят на головную ноду, к которой есть доступ.

Через сокет-файл вряд ли будет работать, так как для UNIX-сокетов обязательно, чтобы клиент и сервер работали в одном и том же инстансе ОС. А вот обычный файл должен работать.

Более «прямой» способ - слать сообщения через MPI, или что там у вас на кластере используется.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Через MPI скорее всего не выйдет, ни на один из узлов где запускается приложение входа нет. А что бы со стороны прицепится/отцепится к мпи, и так несколько раз - я про такое не слышал…

AntonI ★★★★
()
Ответ на: комментарий от annulen

У себя в локальной сети или (если уже боевой запуск на кластере) то по логам.

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

AntonI ★★★★
()

в бесконечном цикле

Надо внутрь цикла вставить какие-то проверки?

В идеале, хочется что-то вроде debug-режима

Я думаю, что запуск под удалённым отладчиком мог бы помочь посмотреть, что творится внутри. Но я не владею отладкой в Linux на таком уровне.

Shushundr ★★★
()