为什么以下异步生成器会挂起?我尝试启动HTTP调用,产生一些工作的结果,然后获得该HTTP调用的结果。
这是导致生成器永久挂起的代码:
<section class="contact-main">
<div class="container">
<div class="email">
<i class="fas fa-envelope fa-3x"><p> Email</p></i>
</div>
<div class="phone">
<i class="fas fa-phone-square fa-3x"><p> Phone</p></i>
</div>
<div class="facebook">
<i class="fab fa-facebook-square fa-3x"><p> Facebook</p></i>
</div>
</div>
</section>
在这个例子中,do_http_call和do_work都是异步的非阻塞函数。
如果我同时启动任务并在yield之后获得任务结果它可以正常工作:
async def my_generator(items):
for item in items:
# start task before yield
task = asyncio.get_event_loop().create_task(do_http_call(item))
yield await do_work(item)
task_result = await task # <-- this line hangs forever