class Semaphore(_ContextManagerMixin):
def __init__(self, value=1, *, loop=None):
if value < 0:
raise ValueError("Semaphore initial value must be >= 0")
self._value = value
self._waiters = collections.deque()
if loop is not None:
self._loop = loop
else:
self._loop = events.get_event_loop()
这是因为信号量构造函数在asyncio/locks.py中设置了它的
_loop
属性:但是
^{pr2}$asyncio.run()
开始了一个全新的循环——在asyncio/runners.py中,文档中也提到了:在
asyncio.run()
之外启动的Semaphore
获取异步“default”循环,因此不能与使用asyncio.run()
创建的事件循环一起使用。在解决方案
从
asyncio.run()
调用的代码启动Semaphore
。您必须将它们传递到正确的位置,还有更多的方法可以这样做,例如,您可以使用contextvars,但我只举一个最简单的例子:相关问题 更多 >
编程相关推荐