Найти - Пользователи
Полная версия: Как контролировать длительные процессы?
Начало » Django » Как контролировать длительные процессы?
1 2
slav0nic
Если для вашей задачи достаточно subprocess, то им и пользуйтесь
plusplus
А каким образом может потом прибить скрипт, который я запустил через subprocess? Средства обычной остановки я придумаю, а если его всё-таки надо будет принудительно умертвить в аварийных ситуациях? Запомнить его pid, сохранить где-нибудь и потом послать ем kill? Я погуглил, насчет kill процесса там сплошные костыли, вплоть до вызывания команд ps и kill средствами python через тот же subprocess. Более менее понятно с celery, создал task, запомнил его id, в любой момент нашел таск по id и остановил. Но насчет celery уже передумал, да и установка у него не “в два клика”.
slav0nic
os.kill() как-бы с SIGTERM и его корректная обработка в скрипте, или SIGKILL для “аварийного”
это не костыль, а основные принципы работы posix систем
plusplus
Проблема возникла, процесс запущенный с помощью subprocess.Popen я не могу прибить ни средствами Питона: os.kill(pid, signal.SIGKILL), ни через shell Linux. Подскажите как быть? Может процесс как-то не так запускаю?
p = subprocess.Popen([sys.executable, 'tasks.py'])
slav0nic
может не тот pid?) код показывай
plusplus
slav0nic
может не тот pid?) код показывай

Код запуска процесса я показал. Этот процесс я не могу убить из консоли! пишу kill -9 pid(12312, например), а процесс остается жив. Если я выключаю тестовый сервер manage.py, то процесс пропадает. Вот в принципе можно начать с этого=). А через питон убить я его пытался как-то так:
os.kill(settings.pid, signal.SIGKILL)
slav0nic
SIGKILL не перехватывается, выполняется на уровне ОС, то есть процесс отстрелится должен, не важно на чём и как писан получатель сего сигнала …
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB