Как я могу убедиться, что сопрограмма вызывается только один раз, то есть не одновременно? - PullRequest
0 голосов
/ 17 марта 2020

Я столкнулся с проблемой: во время работы сопрограммы она await редактировалась, а другая сопрограмма, которая называлась первой, заняла место.

Это, конечно, вызвало проблему, поскольку эта сопрограмма не должна была выполняться более одного раза одновременно.

Мне было интересно, есть ли способ pythoni c, чтобы предотвратить это.

Все, что я мог придумать с должен был создать блокировку для каждой такой сопрограммы и использовать ее в начале, например так:

class Bla:
    def __init__(self):
        self._method_lock = asyncio.Lock()

    async def only_run_once(self):
        async with self._method_lock:
            await do_other_stuff()
            [...]

Я не уверен, как это будет работать с сопрограммами, не относящимися к методу. Где поставить замок? Прямо над ним в глобальном пространстве имен?

...