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

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):

  • https://docs.python.org/3.7/library/asyncio-sync.html
  • https://docs.python.org/3.9/library/asyncio-sync.html

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.