V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
taomujian
V2EX  ›  Python

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

  •  
  •   taomujian · 2022-05-04 01:24:59 +08:00 · 2709 次点击
    这是一个创建于 928 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2022-05-05 13:54:58 +08:00
    future0906
        1
    future0906  
       2022-05-04 01:32:53 +08:00
    你都用 aiohttp 了,还用线程干嘛? aio 内部有挺多池的,不一定线程安全。
    taomujian
        2
    taomujian  
    OP
       2022-05-04 12:47:09 +08:00
    @future0906 不用线程的话,函数 b 请求过多,会比较慢
    Richard14
        3
    Richard14  
       2022-05-04 13:18:06 +08:00
    @taomujian 这是你的错觉,处理器刷新频率在 1e9 的数量级,一般系统级语言( c 或者 rust )处理寄存器数据,或者 L1 缓存数据大概每秒的处理量也在这个数量级,python 就算比较慢每秒能执行的指令个数也在 1e8 的数量级,相比之下系统对虚拟文件 IO 的处理速度十分有限,大概只有 10 万到 100 万的数量级,相差遥远。所以 IO 瓶颈在于系统处理不处理得过来请求,而不是程序发送不发送得了足够多的请求,IO 复用以后你用单线程多线程都能轻易达到系统处理能力上限
    taomujian
        4
    taomujian  
    OP
       2022-05-04 13:25:58 +08:00
    @Richard14 我把线程改用 aiohttp 后,也是出现请求丢失的现象,这是怎么回事?和服务端处理请求速度是不是有关?
    sss495088732
        5
    sss495088732  
       2022-05-05 13:54:58 +08:00
    先解耦再换 httpx
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2011 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:43 · PVG 08:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.