Существует код 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__»?
Существует код Python, содержащий декоратор singleton_process и декодируемую функцию hello. Декоратор предназначен для защиты от повторного запуска скрипта в другом терминале/процессе. [code]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 [/code] Код автоматически вызывает декодируемую функцию, даже если его об этом явно не просят. Как я могу исправить скрипт и заставить его запускать функцию hello() только в операторе if __name__ == «__main__»?
Как я могу привлечь аргумент в декоратор, чтобы ограничить тип возврата функции, оформленную, при поддержании подсказки типа Docstring и Argery в моем IDE при вызове украшенной функции? />
from functools import wraps
Я работаю в большой частной области (~ 1300 строк), который содержит множество переменных и вспомогательных функций, определенных с помощью let.
Когда я перемещаю код вокруг, я иногда сталкиваюсь с ошибками, такими как:
Cannot access 'x' before...
Для практики C++ я разрабатываю собственное (шаблонное) двоичное дерево поиска. Я столкнулся с проблемой с моими функциями «печати», которые я собираюсь пройти по дереву и заполнить его печатную структуру. Я получаю сообщение об ошибке «Нет...
Я пытался найти решение, но, к сожалению, безуспешно. Надеюсь, кто-нибудь здесь сможет помочь с этой идеей или полностью разбить ее, если это невозможно.
Есть ли возможность разместить другую функцию поверх уже существующего класса или функции...
При настройке URL-адреса обратного вызова веб-перехватчика возникает ошибка: «URL-адрес обратного вызова или токен проверки не удалось проверить. Проверьте предоставленную информацию или повторите попытку позже».