Как другой поток Python может ожидать освобождения блокировки? - PullRequest
0 голосов
/ 27 января 2020

Учитывая этот код, как я могу убедиться, что get_model() всегда можно вызвать без ожидания, если reload_lock не активен?

Предпочтительно, я не хочу, чтобы get_model() вызвал reload_lock, поскольку все потоки могут свободно вызывать этот метод, если приложение не перезагружает свои модели.

import threading

reload_lock = threading.Lock()


def get_model(name):
    # Normally this can be called, unless reload_models() is active
    # e.g. "if reload_lock.locked() -> wait until lock is released.
    ...


def reload_models():
    try:
        reload_lock.acquire()
        ...  # reload models
    finally:
        reload_lock.release()

1 Ответ

1 голос
/ 27 января 2020

Может быть, вы должны попробовать вот так, в get_model():

if reload_lock.locked():
    reload_lock.acquire()
    reload_lock.release()

Я знаю, что это acquire, но может быть решением, если вы мгновенно release это.

...