Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 1, 2015 13:43:54

russian_bear
Зарегистрирован: 2014-09-23
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

здравствуйте друзья,

Есть следующая проблема - есть некая софтина на 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)

спасибо

Офлайн

#2 Янв. 1, 2015 14:31:40

ajib6ept
От: От: От: От: От: От: От: От:
Зарегистрирован: 2013-08-04
Сообщения: 297
Репутация: +  26  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

Через TASKKILL можно завершить процесс



_________________________
Python golden rule: Do not PEP 8 unto others; only PEP 8 thy self.
Don't let PEP 8 make you insanely intolerant of other people's code.

Офлайн

#3 Янв. 1, 2015 15:10:58

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

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)



————————————————
-*- Simple is better than complex -*-

Офлайн

#4 Янв. 2, 2015 09:13:48

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

terabayt
Первый раз запуститься soft_1 нормально, создаст pid-файл, затем подвиснет. soft_2 ее благополучно убьет, и запустить soft_1, которая в свою очередь запуститься, увидит что pid-файл уже есть и закроется. Тупик, потому что os.unlink() никогда не сработает, ибо до нее в разделе “ваш код” будет прерывание работы программы. Выходов несколько, но самый простой будет в soft_2 удалять pid-файл.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Янв. 2, 2015 13:22:31

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

> Есть следующая проблема - есть некая софтина на python (soft_1.py) которая занимается обработкой неких больших массивов текстовых данных, в силу ряда причин эта софтина иногда “подвисает” / просто останавливается.

Тебе её не перезапускать, а чинить надо. Костыли могут быть только временным решением.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Янв. 2, 2015 13:32:29

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

Rodegast
Все сидел и ждал такого ответа. Плюсую.

Офлайн

#7 Янв. 2, 2015 14:06:10

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

перезапуск python программы другой python программой

JOHN_16 спасибо, не скопировалась последняя строка, а я и не заметил
вот:

import os
import signal
pidfile = "test.pid"
os.kill(int(file(pidfile).readline()), signal.SIGQUIT)
os.unlink(pidfile)



————————————————
-*- Simple is better than complex -*-

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version