Форум сайта python.su
1
Как сделать так что бы у меня запускался только 1 экземпляр приложения..
То есть если приложение уже запущенно , то что бы 2й экземпляр приложения не запускался..
Офлайн
186
Сделай pid файл.
Офлайн
1
Rodegast
Подскажите как, то есть как он должен выглядеть и что должно быть внутри?
Офлайн
294
ничего не должно быть, он может быть совершенно пустым.
берешь файл назови его как хочешь, например .pid или .lock. А у себя а скрипте пишешь примерно такой код:
Старт скрипта
Если файл .pid существует:
пробуем:
открыть .pid на запись
иначе:
выход из скрипта
иначе:
открыть .pid на запись
.....
основной код
.....
закрыть .pid
удалить .pid
конец скрипта.
[code python][/code]
Отредактировано PEHDOM (Июнь 11, 2017 22:52:08)
Офлайн
1
PEHDOM
Привит
..
Я по сути я так и сделал, только есть 1 проблема при не корректном завершении программы файл не удаляется (то есть в нашем случае файл .pid) - то есть программа следующий раз запускается..
приходится в ручную удалять этот .pid файл, после запускать программу!
—————————————————————————————————–
Можно этот момент как нибудь откорректировать?..
Офлайн
186
Записывай в файл pid текущего процесса, при старте программы проверяй существует ли он. Если не существует то программа завершилась аварийно.
Офлайн
1
Rodegast
Не получается что то!
Можешь на примере поазать!
———————————————–
в примере PEHDOM :
Старт скрипта Если файл .pid существует: пробуем: открыть .pid на запись иначе: выход из скрипта иначе: открыть .pid на запись ..... основной код ..... закрыть .pid удалить .pid конец скрипта.
Офлайн
568
OzMod
не надо ничего выдумывать, все уже выдумано за нас https://pypi.python.org/pypi/filelock
Офлайн
294
OzModЭто потому что ты проверяешь файл на существование, а нужно на занятость. Тоесть не просто создать-удалить, а создать и держать открытым на протяжении всей работы скрипта. В случае некоректного завершения, файл остается но разблокируеться поскольку процес котороый держи его уже не сществует.
есть 1 проблема при не корректном завершении программы файл не удаляется (то есть в нашем случае файл .pid) - то есть программа следующий раз запускается..
приходится в ручную удалять этот .pid файл, после запускать программу!
with open('.lock', 'bw') as lockFile: #тут идет основной текст скрипта....
Старт скрипта
Если файл .pid существует:
открываем и читаем из него PID
смотрим в процессах, если есть процесс с таким PID:
завершаем скрипт
иначе:
пишем свой PID в файл
иначе:
создаем файл, пишем свой PID в файл
закрываем .pid
основной код
.....
[code python][/code]
Отредактировано PEHDOM (Июнь 14, 2017 09:37:51)
Офлайн
221
я правильно понял что утверждается, что если открыть файл на запись, например f = open('my.lock', ‘w’), то другой процесс не сможет также открыть файл?
Офлайн