Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 14, 2017 11:26:00

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

Ограничение запуска прилажения

> в случае сбоя питания есть вероятность отличная от нуля, что в перезапущеной системе другой процесс получит PID который записан в вашем файле.

Ну можно проверять не только на PID, но ещё и на python.

> Ну и опять же если запускать скрипт из IDE то вы получите PID пайтона котороый висит в памяти постоянно, и повторно запустить скрипт не выйдет так как процесс с таким PID существует и работает.

Никогда такого не замечал.



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

Офлайн

#2 Июнь 14, 2017 12:00:46

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Ограничение запуска прилажения

 #!/usr/bin/env python
import psutil
p =  psutil.Process()
print p.pid,p.name(),p.username(),p.create_time()
print psutil.pid_exists(p.pid)
 bash-3.2$ ./procinfo.py
29647 Python admin 1497430765.86
True
bash-3.2$ ./procinfo.py
29649 Python admin 1497430771.93
True
bash-3.2$ ./procinfo.py
29650 Python admin 1497430779.12
True

Офлайн

#3 Июнь 14, 2017 12:20:28

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

Ограничение запуска прилажения

JOHN_16
я правильно понял что утверждается, что если открыть файл на запись, например f = open('my.lock', ‘w’), то другой процесс не сможет также открыть файл?
Другой процесс не сможет, а вот другой скрипт запущеный в пайтоне сможет. Чето я забыл про эту особенность. Надо его тода блочить на уровне ОС.
Rodegast
Никогда такого не замечал.
не буду спорить, МБ я перепутал, тем более сейчас проверил, разные пиды выдаються даже через IDE.



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

Отредактировано PEHDOM (Июнь 14, 2017 12:34:21)

Офлайн

#4 Июнь 14, 2017 12:27:07

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

Ограничение запуска прилажения

да в том то и дело что не надо. В PID файле надо писать PID текущего процесса и его при запуске проверять. Даже удалять ничего не надо. Корректность завершения это другой вопрос и лучше его решать другими средствами.



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

Офлайн

#5 Июнь 14, 2017 18:21:13

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Ограничение запуска прилажения

Rodegast
вероятность отличная от нуля, что в перезапущеной системе другой процесс получит PID который записан в вашем файле.
Ну так подтирайте файл на перезапуске системы



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Июнь 15, 2017 20:11:12

OzMod
Зарегистрирован: 2017-01-11
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Ограничение запуска прилажения

PEHDOM
Что то ничего у меня не получается!!
При каждом запуске программы, даже при повторном прога получает новый PID…
————————————————————————-
Вот маленький примерчик:

 import os, sys
PID =str(os.getpid())
if os.path.exists(os.path.dirname(sys.argv[0])+r"\Run.pid")==True:
    run = open(os.path.dirname(sys.argv[0])+r"\Run.pid", "r")
    R_run = run.read()
    run.close()
    if R_run == PID:
        pass
        sys.exit(0)
else:
    run = open(os.path.dirname(sys.argv[0])+r"\Run.pid", "w")
    run.write(PID)
    run.close()
print("Номер процесса: "+PID)
input("Нажмите кнопку")

Отредактировано OzMod (Июнь 15, 2017 20:16:03)

Офлайн

#7 Июнь 15, 2017 21:35:57

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

Ограничение запуска прилажения

OzMod
Что то ничего у меня не получается!!
так тебе не нужон сравнивать с текущим PID, а искать среди запущеных процессов процесс с таким PID
немного поправил.
  import os, sys, psutil
PID =str(os.getpid())
if os.path.exists(os.path.dirname(sys.argv[0])+r"\Run.pid")==True:
    run = open(os.path.dirname(sys.argv[0])+r"\Run.pid", "r")
    R_run = int(run.read())
    run.close()
    if psutil.pid_exists(R_run):
        sys.exit(0)
    else:
        run = open(os.path.dirname(sys.argv[0])+r"\Run.pid", "w")
        run.write(PID)
        run.close()
else:
    run = open(os.path.dirname(sys.argv[0])+r"\Run.pid", "w")
    run.write(PID)
    run.close()
print("Номер процесса: "+PID)
input("Нажмите кнопку")
это “простой вариант”, сложный нужно еще проверять на то что это PID принадлежить пайтону.
 if psutil.pid_exists(R_run):
        sys.exit(0)
тогда выглядиттак:
 if psutil.pid_exists(R_run):
    proc = psutil.Process(R_run):
    if proc.name = 'python.exe' #  Исправить python.exe если  не венда
        sys.exit(0)



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

Отредактировано PEHDOM (Июнь 15, 2017 21:50:49)

Офлайн

#8 Июнь 16, 2017 23:33:45

OzMod
Зарегистрирован: 2017-01-11
Сообщения: 38
Репутация: +  1  -
Профиль   Отправить e-mail  

Ограничение запуска прилажения

PEHDOM
ОГРОМНОЕ ТЕБЕ СПАСИБО!!!!
100 БАЛОВ ЗА ОБЪЯСНЕНИЕ!!!!!

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version