Уведомления

Группа в Telegram: @pythonsu

#1 Июль 25, 2016 08:09:18

maks2236
Зарегистрирован: 2016-07-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверить, что программа уже запущена

Как можно проверить, что другая копия этого скрипта уже запущена?

Офлайн

#2 Июль 25, 2016 11:03:04

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

Проверить, что программа уже запущена

 # pip install -U psutil
 >>> import psutil
>>> "python" in { x.name() for x in psutil.process_iter() }
True



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

Отредактировано Rodegast (Июль 25, 2016 11:05:08)

Офлайн

#3 Июль 25, 2016 12:22:18

maks2236
Зарегистрирован: 2016-07-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверить, что программа уже запущена

Rodegast
Такой вариант не подходит, потому что в системе могут работать и другие python скрипты.

Офлайн

#4 Июль 25, 2016 15:58:39

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

Проверить, что программа уже запущена

> в системе могут работать и другие python скрипты.

Тогда проверяй по командной строке:

 >>> "/usr/bin/python ./manage.py runserver" in { " ".join(x.cmdline()) for x in psutil.process_iter() }
True



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

Офлайн

#5 Июль 26, 2016 00:50:02

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

Проверить, что программа уже запущена

maks2236
Как можно проверить, что другая копия этого скрипта уже запущена?
Надо создавать файл при запуске и удалять при завершении, и по его наличию на диске определять, запущена ли копия.



Офлайн

#6 Июль 26, 2016 08:00:37

maks2236
Зарегистрирован: 2016-07-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверить, что программа уже запущена

py.user.next
ммм, очень интересный способ, спасибо за наводку)
Кажется apt в linux делает так же.

Офлайн

#7 Июль 26, 2016 10:08:00

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

Проверить, что программа уже запущена

maks2236
Кажется apt в linux делает так же.
Многие приложения так делают (lock-файлы), а пакетные менджеры делают это, чтобы исключить одновременный доступ к пакетной базе данных.



Офлайн

#8 Июль 26, 2016 16:45:57

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

Проверить, что программа уже запущена

Добавлю, что последовательность операций проверки и создания файла должна быть атомарна(выполняться как одна команда) чтобы избежать гонок при одновременном запуске двух ваших программ сразу. Смотрите на ключик ‘x’ у функции open.



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

Офлайн

#9 Июль 27, 2016 14:52:34

maks2236
Зарегистрирован: 2016-07-20
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверить, что программа уже запущена

Не совсем понял, как этот ключ может мне помочь. Он не делает операцию атомарной, а просто проверяет существует файл или нет.

Офлайн

#10 Июль 27, 2016 19:35:02

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

Проверить, что программа уже запущена

maks2236
Он не делает операцию атомарной, а просто проверяет существует файл или нет.
Нет, для вас это будет именно атомарно.
open for exclusive creation, failing if the file already exists
. Порядок вызовов на создание файла из разных потоков разрулит операционка.
Вызываете open - если вернул файловый объект, значит захватили блокировку, если словили исключение - обломились.



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version