Найти - Пользователи
Полная версия: перезапуск python программы другой python программой
Начало » Python для новичков » перезапуск python программы другой python программой
1
russian_bear
здравствуйте друзья,

Есть следующая проблема - есть некая софтина на python (soft_1.py) которая занимается обработкой неких больших массивов текстовых данных, в силу ряда причин эта софтина иногда “подвисает” / просто останавливается. Задача - нужно какой-то доп. внешней программой(soft_2.py) перезапускать прогу soft_1.py. Критерии по которым должна срабатывать прога для перезапуска у меня есть (прекращение изменения выходного файла output.txt ), запустить прогой soft_2.py прогу soft_1.py - элементарно, т.е. остается одна основная проблема - как софтиной soft_2.py “прибить” процесс soft_1.py ? (работает в Windows 7)

спасибо
ajib6ept
Через TASKKILL можно завершить процесс
terabayt
soft_1.py
import os
import sys
pid = str(os.getpid())
pidfile = "test.pid"
if os.path.isfile(pidfile):
    print "%s уже существует. заверште программу" % pidfile
    sys.exit()
else:
    file(pidfile, 'w').write(pid)
# ваш код
os.unlink(pidfile)
soft_2.py
import os
import signal
pidfile = "test.pid"
# если выполняется условие (прекращение изменения выходного файла output.txt ), то
os.kill(int(file(pidfile).readline()), signal.SIGQUIT)
JOHN_16
terabayt
Первый раз запуститься soft_1 нормально, создаст pid-файл, затем подвиснет. soft_2 ее благополучно убьет, и запустить soft_1, которая в свою очередь запуститься, увидит что pid-файл уже есть и закроется. Тупик, потому что os.unlink() никогда не сработает, ибо до нее в разделе “ваш код” будет прерывание работы программы. Выходов несколько, но самый простой будет в soft_2 удалять pid-файл.
Rodegast
> Есть следующая проблема - есть некая софтина на python (soft_1.py) которая занимается обработкой неких больших массивов текстовых данных, в силу ряда причин эта софтина иногда “подвисает” / просто останавливается.

Тебе её не перезапускать, а чинить надо. Костыли могут быть только временным решением.
4kpt_III
Rodegast
Все сидел и ждал такого ответа. Плюсую.
terabayt
JOHN_16 спасибо, не скопировалась последняя строка, а я и не заметил
вот:
import os
import signal
pidfile = "test.pid"
os.kill(int(file(pidfile).readline()), signal.SIGQUIT)
os.unlink(pidfile)
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