Форум сайта python.su
0
здравствуйте друзья,
Есть следующая проблема - есть некая софтина на 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)
спасибо
Офлайн
26
Через TASKKILL можно завершить процесс
Офлайн
103
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)
import os import signal pidfile = "test.pid" # если выполняется условие (прекращение изменения выходного файла output.txt ), то os.kill(int(file(pidfile).readline()), signal.SIGQUIT)
Офлайн
221
terabayt
Первый раз запуститься soft_1 нормально, создаст pid-файл, затем подвиснет. soft_2 ее благополучно убьет, и запустить soft_1, которая в свою очередь запуститься, увидит что pid-файл уже есть и закроется. Тупик, потому что os.unlink() никогда не сработает, ибо до нее в разделе “ваш код” будет прерывание работы программы. Выходов несколько, но самый простой будет в soft_2 удалять pid-файл.
Офлайн
186
> Есть следующая проблема - есть некая софтина на python (soft_1.py) которая занимается обработкой неких больших массивов текстовых данных, в силу ряда причин эта софтина иногда “подвисает” / просто останавливается.
Тебе её не перезапускать, а чинить надо. Костыли могут быть только временным решением.
Офлайн
39
Rodegast
Все сидел и ждал такого ответа. Плюсую.
Офлайн
103
JOHN_16 спасибо, не скопировалась последняя строка, а я и не заметил
вот:
import os import signal pidfile = "test.pid" os.kill(int(file(pidfile).readline()), signal.SIGQUIT) os.unlink(pidfile)
Офлайн