Reputation: 15598
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
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
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
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