Запускайте функцию только один раз во время выполнения в PythonPython

Программы на Python
Ответить
Anonymous
 Запускайте функцию только один раз во время выполнения в Python

Сообщение Anonymous »

Необходимо загрузить некоторые данные в память. Для этого мне нужно убедиться, что моя функция, которая делает это, запускается только один раз во время выполнения, независимо от того, сколько раз она вызывается.

Я использую декоратор чтобы сделать это потокобезопасным способом.
Вот код, который я использую:

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

import threading

# Instantiating a lock object
# This will be used to ensure that multiple parallel threads will not be able to run the same function at the same time
# in the @run_once decorator written below
__lock = threading.Lock()

def run_once(f):
"""
Decorator to run a function only once.

:param f: function to be run only once during execution time despite the number of calls
:return: The original function with the params passed to it if it hasn't already been run before
"""
def wrapper(*args, **kwargs):
"""
The actual wrapper where the business logic to call the original function resides

:param args:
:param kwargs:
:return: The original function unless the wrapper has been run already
"""
if not wrapper.has_run:
with __lock:
if not wrapper.has_run:
wrapper.has_run = True
return f(*args, **kwargs)

wrapper.has_run = False
return wrapper
Нужно ли мне дважды проверять флаг has_run один раз снаружи и один раз внутри блокировки, чтобы чтение не выполнялось для устаревшего объекта ?

Подробнее здесь: https://stackoverflow.com/questions/509 ... -in-python
Ответить

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

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

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

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

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