Форум сайта python.su
0
Как можно проверить, что другая копия этого скрипта уже запущена?
Офлайн
186
# pip install -U psutil
>>> import psutil >>> "python" in { x.name() for x in psutil.process_iter() } True
Отредактировано Rodegast (Июль 25, 2016 11:05:08)
Офлайн
0
Rodegast
Такой вариант не подходит, потому что в системе могут работать и другие python скрипты.
Офлайн
186
> в системе могут работать и другие python скрипты.
Тогда проверяй по командной строке:
>>> "/usr/bin/python ./manage.py runserver" in { " ".join(x.cmdline()) for x in psutil.process_iter() } True
Офлайн
857
maks2236Надо создавать файл при запуске и удалять при завершении, и по его наличию на диске определять, запущена ли копия.
Как можно проверить, что другая копия этого скрипта уже запущена?
Офлайн
0
py.user.next
ммм, очень интересный способ, спасибо за наводку)
Кажется apt в linux делает так же.
Офлайн
857
maks2236Многие приложения так делают (lock-файлы), а пакетные менджеры делают это, чтобы исключить одновременный доступ к пакетной базе данных.
Кажется apt в linux делает так же.
Офлайн
72
Добавлю, что последовательность операций проверки и создания файла должна быть атомарна(выполняться как одна команда) чтобы избежать гонок при одновременном запуске двух ваших программ сразу. Смотрите на ключик ‘x’ у функции open.
Офлайн
0
Не совсем понял, как этот ключ может мне помочь. Он не делает операцию атомарной, а просто проверяет существует файл или нет.
Офлайн
72
maks2236Нет, для вас это будет именно атомарно.
Он не делает операцию атомарной, а просто проверяет существует файл или нет.
open for exclusive creation, failing if the file already exists. Порядок вызовов на создание файла из разных потоков разрулит операционка.
Офлайн