Что такое чистый способ передать функции контекста? - PullRequest
0 голосов
/ 25 октября 2018

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

Например:

from threading import Lock
lock = Lock()


def foo():
    print('foo')
    with lock:
        print('foo-locked')
        bar()


def bar():
    print('bar')
    with lock:
        print("bar-locked")  # Will not print since lock is owned by foo()

foo()

Существует ли чистый способ передачи контекста одной функции в другую?Я бы предпочел не отправлять блокировку в качестве аргумента - тогда я бы использовал контекстные менеджеры в одних функциях, а не в других.

1 Ответ

0 голосов
/ 25 октября 2018

Можно рассмотреть возможность использования блокировки повторного входа ( Threading.RLock ).Пока 2 функции, которые нуждаются в блокировке, находятся в одном потоке, они смогут продолжать работу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...