"async with lock" 和 "with await lock" 有什么区别?

9

我看到有两种获得 asyncio Lock 的方法:

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

and

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

它们之间有什么区别?


1
with await lock已被弃用,并在Python 3.9中消失。请勿使用它。 - user2357112
3个回答

7

3

在功能上不应有任何差异。

但是,后者在 Python 3.9 中被移除了。请参见页面底部 https://docs.python.org/3/library/asyncio-sync.html

自版本3.9起更改:使用 await lock 或 yield from lock 和/或 with 语句(with await lock、with (yield from lock))来获取锁已被移除。请改用 async with lock。


0

async with lock 是异步上下文管理器的语句,它在进入 (__aenter__) 和退出 (__aexit__) 方法中挂起执行。 async with 从 Python 3.5 开始支持,并在 PEP 492 中得到了完整描述。 with await lock 在 Python 3.9 中已被正式删除,建议改用 async with lock


1
请注意,一般情况下 with await x 不等同于 async with x。这只是一个技巧,锁被赋予了可等待性,特别是为了让 with await lock 起作用。该技巧已被移除,但 with await x 仍然是有效的语法 - 您可以等待一个对象并在等待结果上使用(普通的非异步)with。但那种情况很少有用。 - user4815162342

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接