Найти - Пользователи
Полная версия: Проверить, что программа уже запущена
Начало » Python для новичков » Проверить, что программа уже запущена
1 2
maks2236
Как можно проверить, что другая копия этого скрипта уже запущена?
Rodegast
 # pip install -U psutil
 >>> import psutil
>>> "python" in { x.name() for x in psutil.process_iter() }
True
maks2236
Rodegast
Такой вариант не подходит, потому что в системе могут работать и другие python скрипты.
Rodegast
> в системе могут работать и другие python скрипты.

Тогда проверяй по командной строке:
 >>> "/usr/bin/python ./manage.py runserver" in { " ".join(x.cmdline()) for x in psutil.process_iter() }
True
py.user.next
maks2236
Как можно проверить, что другая копия этого скрипта уже запущена?
Надо создавать файл при запуске и удалять при завершении, и по его наличию на диске определять, запущена ли копия.
maks2236
py.user.next
ммм, очень интересный способ, спасибо за наводку)
Кажется apt в linux делает так же.
py.user.next
maks2236
Кажется apt в linux делает так же.
Многие приложения так делают (lock-файлы), а пакетные менджеры делают это, чтобы исключить одновременный доступ к пакетной базе данных.
PooH
Добавлю, что последовательность операций проверки и создания файла должна быть атомарна(выполняться как одна команда) чтобы избежать гонок при одновременном запуске двух ваших программ сразу. Смотрите на ключик ‘x’ у функции open.
maks2236
Не совсем понял, как этот ключ может мне помочь. Он не делает операцию атомарной, а просто проверяет существует файл или нет.
PooH
maks2236
Он не делает операцию атомарной, а просто проверяет существует файл или нет.
Нет, для вас это будет именно атомарно.
open for exclusive creation, failing if the file already exists
. Порядок вызовов на создание файла из разных потоков разрулит операционка.
Вызываете open - если вернул файловый объект, значит захватили блокировку, если словили исключение - обломились.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB