Python 协程里 for 很长的 list 会阻塞吗?

2020-10-30 11:41:40 +08:00
 Te11UA
由于看到有 `async for` 和 `for await `,所以不清楚如果 task_list 是一个比较长的 list 是否会阻塞呢?找了一圈谷歌没有说到这个的...

```python
async def func():
____task_list = list()
____for task in tasks.task_list:
________status= await redis_client.get(f'task:{task}')
```
1806 次点击
所在节点    Python
2 条回复
fasionchan
2020-10-30 13:11:12 +08:00
不会,如果子任务阻塞的话,await 会让出执行权
black11black
2020-10-31 04:27:16 +08:00
取决于你调用方法内部是否有把控制权返回的命令。一个异步函数,内部如果没有任何异步调用,过程中即使 await 也是不会向 eventloop 返回的,也就是说执行时阻塞。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/720104

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX