Как я могу определить, какая другая копия скрипта Python уже запущена? - PullRequest
2 голосов
/ 14 февраля 2010

У меня есть скрипт. Он использует GTK. И мне нужно знать, запускается ли еще одна копия скрипта. Если это начнется, окно расширится.

Пожалуйста, скажите мне, как я могу это обнаружить.

Ответы [ 4 ]

3 голосов
/ 14 февраля 2010

Вы можете воспользоваться услугой D-Bus. Ваш сценарий запустит новую службу, если в текущем сеансе не будет найдено ни одной, и в противном случае отправит сообщение D-Bus работающему установщику (который может отправить «что угодно», включая строки, списки, сообщения).

Библиотека на базе GTK libunique (отсутствует привязка Python?) Использует этот подход при реализации «уникальных» приложений.

1 голос
/ 14 февраля 2010

Вы можете использовать PID-файл, чтобы определить, запущено ли уже приложение (просто найдите «python daemon» в Google, чтобы найти некоторые рабочие реализации).

Если вы обнаружили, что программа уже запущена, вы можете связаться с запущенным экземпляром, используя именованные каналы .

0 голосов
/ 14 февраля 2010

Я сделал это несколькими способами в зависимости от сценария

  1. В одном случае мой скрипт должен был прослушивать порт TCP. Так что я бы просто посмотрел, был ли доступен порт, это означало бы, что это новая копия. Это было достаточно для меня, но в некоторых случаях, если порт уже используется, это может быть связано с тем, что какой-то другой тип приложений прослушивает этот порт. Вы можете использовать вызовы ОС, чтобы узнать, кто прослушивает порт, или попробовать отправить данные и проверить ответ.
  2. В другом случае я использовал файл PID. Просто определите местоположение и имя файла, и каждый раз, когда ваш скрипт запускается, читайте этот файл, чтобы получить PID. Если этот PID запущен, это означает, что другая копия уже есть. В противном случае создайте этот файл и запишите в нем свой идентификатор процесса. Это довольно просто. Если вы используете django, то вы можете просто использовать демон django: «from django.utils import daemonize». В противном случае вы можете использовать этот скрипт: http://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/
0 голосов
/ 14 февраля 2010

Новая копия может выполнять поиск запущенных копий, запускать сигнал SIGUSER и запускать обратный вызов в вашем рабочем процессе, который затем обрабатывает всю магию.

См. Библиотеку signal для получения подробной информации и списка вещей, которые могут пойти не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...