aiohttp 发送大量请求时,有些请求丢失

2022-05-04 01:24:59 +08:00
 taomujian

用 async 去异步执行函数 a 和函数 b,函数 a 用的 aiohttp 发送请求,发多一个,函数 b 用的 asyncio.to_thread 开多线程去执行同步操作(requests),发送请求很多个,同时运行 a 和 b,b 正常运行,但是 a 的请求丢失了,不返回内容,也捕获不到异常.但是单独运行 a,a 就正常运行,各位大佬们,这是怎么回事?

2755 次点击
所在节点    Python
5 条回复
future0906
2022-05-04 01:32:53 +08:00
你都用 aiohttp 了,还用线程干嘛? aio 内部有挺多池的,不一定线程安全。
taomujian
2022-05-04 12:47:09 +08:00
@future0906 不用线程的话,函数 b 请求过多,会比较慢
Richard14
2022-05-04 13:18:06 +08:00
@taomujian 这是你的错觉,处理器刷新频率在 1e9 的数量级,一般系统级语言( c 或者 rust )处理寄存器数据,或者 L1 缓存数据大概每秒的处理量也在这个数量级,python 就算比较慢每秒能执行的指令个数也在 1e8 的数量级,相比之下系统对虚拟文件 IO 的处理速度十分有限,大概只有 10 万到 100 万的数量级,相差遥远。所以 IO 瓶颈在于系统处理不处理得过来请求,而不是程序发送不发送得了足够多的请求,IO 复用以后你用单线程多线程都能轻易达到系统处理能力上限
taomujian
2022-05-04 13:25:58 +08:00
@Richard14 我把线程改用 aiohttp 后,也是出现请求丢失的现象,这是怎么回事?和服务端处理请求速度是不是有关?
sss495088732
2022-05-05 13:54:58 +08:00
先解耦再换 httpx

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

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

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

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

© 2021 V2EX