我是一个Python编程爱好者,最近在学习asyncio的用法时遇到了下面代码中演示的问题。
import asyncio
async def a():
sem = asyncio.Semaphore(2)
async with sem:
print(sem)
async def b():
async with asyncio.Semaphore(2) as sem:
print(sem)
if __name__ == "__main__":
asyncio.run(a())
asyncio.run(b())
"""
output:
<asyncio.locks.Semaphore object at 0x7f28e4eaca60 [unlocked, value:1]>
None
"""
我很好奇为什么会发生这种情况。是因为信号量对象不能与async with as语法一起使用吗?
我使用的Python版本是在AlmaLinux上运行的Python 3.9,我已经在Python中查找了'as'关键字的语法要求,并尝试在Stack Overflow上搜索答案,但我无法找到为什么会发生这种情况。如果有人能帮助我澄清这个困惑,我将不胜感激,欢迎任何回复。谢谢。
1条答案
按热度按时间h79rfbju1#
请考虑以下示例:
图纸:
您会看到
None
,因为从__aenter__
返回的值是None
。来源:https://github.com/python/cpython/blob/main/Lib/asyncio/locks.py#L12