Ошибка автоматического вызова декорированной функции в PythonLinux

Ответить Пред. темаСлед. тема
Anonymous
 Ошибка автоматического вызова декорированной функции в Python

Сообщение Anonymous »

Существует код Python, содержащий декоратор singleton_process и декодируемую функцию hello. Декоратор предназначен для защиты от повторного запуска скрипта в другом терминале/процессе.

Код: Выделить всё

from multiprocessing import shared_memory
import time
import os
import sys

def singleton_process(*args, **kwargs):
def wrapper(func):
flag = True
try:
shared_name = kwargs.get('shared_name')
shm = shared_memory.SharedMemory(
name=shared_name,
create=True,
size=1
)
print("The first copy of the script has been launched.")
func()
except FileExistsError:
flag = False
print("Another instance of the script is already running.")
sys.exit(1)
except KeyboardInterrupt:
shm.close()
shm.unlink()
finally:
if flag:
shm.close()
try:
shm.unlink()
except FileNotFoundError:
pass

return wrapper

@singleton_process(shared_name='my_lock')
def hello():
c = 0
while True:
c += 1
if c == 5:
break
pid = os.getpid()
print(f'PID={pid}. Script it work...')
time.sleep(1)
return True

if __name__ == '__main__':
#print('output=', type(hello))
#hello()
pass
Код автоматически вызывает декодируемую функцию, даже если его об этом явно не просят. Как я могу исправить скрипт и заставить его запускать функцию hello() только в операторе if __name__ == «__main__»?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»