<p>为什么asyncio.gather不能与生成器表达式一起工作</p>
<pre><code>import asyncio
async def func():
await asyncio.sleep(2)
# Works
async def call3():
x = (func() for x in range(3))
await asyncio.gather(*x)
# Doesn't work
async def call3():
await asyncio.gather(func() for x in range(3))
# Works
async def call3():
await asyncio.gather(*[func() for x in range(3)])
asyncio.run(call3())
</code></pre>
<p>第二种变体给出:</p>
<pre><code>[...]
File "test.py", line 13, in <genexpr>
await asyncio.gather(func() for x in range(3))
RuntimeError: Task got bad yield: <coroutine object func at 0x10421dc20>
</code></pre>
<p>这是预期的行为吗</p>
<pre><code>await asyncio.gather(func() for x in range(3))
</code></pre>
<p>这不起作用,因为它将生成器对象</em>作为参数传递给<code>gather</code><code>gather</code>不需要<em>iterable</em>,它需要将协程作为单独的参数。这意味着你需要打开发电机的包装</p>