Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 2, 2021 21:08:39

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

Это правда так сложно перезагрузить программу в Python?

Я новичок в питоне, в детстве интересовался только бейсиком, немного программировал на нем и на лингвистически похожих языках или в программах, поэтому питон мне исключительно неинтуитивен по всему, что возможно.
Я так сяк написал на нем простую программку для работы моих майнеров, которая регулирует их поведение в зависимости от условий рынка. Проблема та, что время от времени сайт, с которого я получаю данные либо виснет, либо дает какие-то неправильные данные, и программа останавливается и выходит. Я ее вручную перезапускаю, и опять несколько часов все нормально.
Я часа 3 провел гуугля как можно автоматически сделать перезапуск, но ума сделать что-то рабочее мне не получается. Углубляться в то, почему и какие там ошибки вылетают, опять же, я на данный момент не хочу, так как банальный перезапуск программы все решает.

Неужели так сложно перезапустить программу, то, что в некоторых других оболочках можно было сделать простой галочкой или парой строк?

Питон на Pycharm на винде 10.

Посоветуйте простое решение.

Отредактировано Renaldas (Фев. 2, 2021 21:09:24)

Офлайн

#2 Фев. 2, 2021 23:38:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

Тебе надо написать второй скрипт B, который запускает первый скрипт A и следит за ним. Если скрипт A выпал, то скрипт B его перезапускает. Скрипт B можно писать на питоне, а можно на другом языке.



Офлайн

#3 Фев. 2, 2021 23:44:11

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

Renaldas
Неужели так сложно перезапустить программу, то, что в некоторых других оболочках можно
Причем тут питон??? Ваша оболочка windows 10. Вот для него и гуглите как запустить процесс как службу.



Офлайн

#4 Фев. 3, 2021 12:00:16

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

Renaldas
Я часа 3 провел гуугля как можно автоматически сделать перезапуск, но ума сделать что-то рабочее мне не получается.
Тут нужно понимать откуда вы хотите “автоматически сделать перезапуск”и как вы его запускаете?
вот такой примитивный скрипт запускает сам себя после завершения .
 import sys
import os
import time
python = sys.executable
print('hello World!!')
time.sleep(5)
print('work finished')
os.execl(python, python, * sys.argv)
другой вариант, вам уже предложил py.user.next создать скрипт который будет запускать, например, через subprocess(или както по другому, сейчакс это не имеет принципиальной роли) ваши скрипты, и контролировать, если процесс завершен запускать его еще раз.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 3, 2021 12:03:37)

Офлайн

#5 Фев. 3, 2021 14:46:22

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1370
Репутация: +  121  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

Renaldas
Проблема та, что время от времени сайт, с которого я получаю данные либо виснет, либо дает какие-то неправильные данные, и программа останавливается и выходит
Я представлял это,как функция в которой рабочий скрипт обернутый в try ,except. Функция работает в возвращает код работоспособности, как у реквест, если ошибка,то далее алгоритм который через сколько то времени пробует запускать функцию.,и ещё смс уведомление или включение сирены гражданской обороны

Офлайн

#6 Фев. 3, 2021 21:30:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

xam1816
Я представлял это,как функция в которой рабочий скрипт обернутый в try ,except.
Случаи бывают разные. Скрипт может сожрать всю допустимую для процесса память, Наоткрывать файловых дескрипторов сверх лимита. Те прийти в состояние когда данный процесс однозначно не может дальше жить. try except не спасет отца русской демократии.

Вот для этих случаев и есть службы. операционка позаботится чтобы процесс воскрес.

Бывают и более жесткие случаи, когда процессы циклятся или операционная система становится нестабильна, на это есть вотчдог таймеры…



Отредактировано doza_and (Фев. 3, 2021 21:31:44)

Офлайн

#7 Фев. 3, 2021 22:06:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

PEHDOM
другой вариант, вам уже предложил py.user.next создать скрипт который будет запускать
Это монитор. Шаблон такой архитектурный. В Erlang'е есть такие, благодаря чему он отказоустойчивый и широко используется в телекоме, где кучи всяких устройств с аппаратными ошибками, нестабильным электричеством и прочим. В Erlang'е изначально много легковесных параллельных процессов можно запускать и они независимы - действуют сами по себе, поэтому там есть средства для работы с ними и всё устроено удобно в этом плане. Вот такой процесс может грохнуться в результате чего-нибудь - свет отрубили, например. И чтобы ничего не менять в нём, так как он исправен и там просто с аппаратурой что-то, придумали вот эти процессы-мониторы, которые следят за обычными процессами и перезапускают их по новой, если те падают. Так там надёжность обеспечивается. И эта модель отлажена уже десятилетиями.



Отредактировано py.user.next (Фев. 3, 2021 22:09:31)

Офлайн

#8 Фев. 4, 2021 22:57:39

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

Это правда так сложно перезагрузить программу в Python?

py.user.next
Тебе надо написать второй скрипт B, который запускает первый скрипт A и следит за ним. Если скрипт A выпал, то скрипт B его перезапускает. Скрипт B можно писать на питоне, а можно на другом языке.

Да, я этот вариант понял и провел какой час спрашивая у гуугла, как это сделать, но пока что моих знаний не хватило. Я пробовал определить PID первого процесса и во втором скрипте задать проверку, есть ли такой процесс, но “завалил” дело на банальном - не смог понять, как другому скрипту передать величину переменной (PID) из первого.

Офлайн

#9 Фев. 5, 2021 09:15:30

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

Renaldas
но “завалил” дело на банальном - не смог понять, как другому скрипту передать величину переменной (PID) из первого.
Обычно первый процесс(котороый нужно мониторить), в заранее определенном месте, создает файл, в который при запуске помещает свой pid. При штатном завершении он этот файл удаляет/очищает. Второй процесс смотрит если файла нет или он пустой, значит процесс не запускали или штатно остановили, если там есть pid то смотрит в процессах, и если не находит процесса с таким pid то значит процесс завершился аварийно, и нужно его перезапустить.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#10 Фев. 5, 2021 11:24:58

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1370
Репутация: +  121  -
Профиль   Отправить e-mail  

Это правда так сложно перезагрузить программу в Python?

вот так баловался с блокнотом,выключал его,он через 5 сек запускался

 import subprocess
import time
notepad = subprocess.Popen('C:\\Windows\\System32\\notepad.exe')
while True:
	if notepad.poll() != None:
		time.sleep(5)
		print('перезапуск')
		notepad = subprocess.Popen('C:\\Windows\\System32\\notepad.exe')
не знаю на сколько он эффективен,не вникал
А так наверное на винде процесс можно запустить через службу,которая при падении будет его перезапускать

Отредактировано xam1816 (Фев. 5, 2021 11:40:10)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version