InfoLearner
InfoLearner

Reputation: 15598

What is the difference between "async with lock" and "with await lock"?

I have seen two ways of acquiring the asyncio Lock:

async def main(lock):
  async with lock:
    async.sleep(100)

and

async def main(lock):
  with await lock:
    async.sleep(100)

What is the difference between them?

Upvotes: 9

Views: 1817

Answers (3)

Pouya Esmaeili
Pouya Esmaeili

Reputation: 1263

async with lock is an statement for asynchronous context manager which suspends execution in enter (__aenter__ ) and exit (__aexit__) methods. async with is supported from Python 3.5 and is fully described in PEP 492. with await lock is the same but in Python 3.9 is officially removed and it is recommended to use async with lock instead.

Upvotes: 0

mkrieger1
mkrieger1

Reputation: 23255

The second form with await lock is deprecated since Python 3.7 and is removed in Python 3.9.

Running it with Python 3.7 gives this warning:

DeprecationWarning: 'with await lock' is deprecated use 'async with lock' instead

Sources (scroll to the bottom):

Upvotes: 7

Derte Trdelnik
Derte Trdelnik

Reputation: 2706

there should be no functional difference

BUT the latter was removed from python 3.9 see at the bottom of the page https://docs.python.org/3/library/asyncio-sync.html

Changed in version 3.9: Acquiring a lock using await lock or yield from lock and/or with statement (with await lock, with (yield from lock)) was removed. Use async with lock instead.

Upvotes: 3

Related Questions