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
maobukui
V2EX  ›  Python

关于 Python 「多进程」「异步」

  •  
  •   maobukui · 2022-04-16 10:39:32 +08:00 · 3017 次点击
    这是一个创建于 954 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先声明,不讨论数据爬取的道德&法律问题,只是一个技术上的尝试。

    尝试了一下 python 的多进程或者异步 2 中写法发起网络请求,都没问题。

    不过,异步的本质还是一个线程在执行,效率虽然已经很高,但是仍然没有发挥多核优势。对于大量的数据,能否多进程+异步完成?

    尝试了下,始终没能成功,网上多进程+同步,或者单进程+异步倒是挺多的,但是多进程+异步相关资料比较少,有大神实践过吗。感谢

    用到的异步请求库 httpx

    6 条回复    2022-05-01 08:41:08 +08:00
    youngce
        1
    youngce  
       2022-04-16 11:13:40 +08:00
    一台机器上多个进程,多个机器上多个进程,后者就是所谓的分布式爬虫了,本质还是消息队列转一下

    scrapy 里面有 scrapy redis

    golang 里面有 colly
    ch2
        2
    ch2  
       2022-04-16 11:16:21 +08:00
    一个线程同时发几百个上千个异步请求就可以把千兆网卡跑满,IO 密集型瓶颈在网速上,而不是你用的是进程线程还是协程。如果你的任务瓶颈在处理返回的数据上,应该用消息队列这种机制,由一个线程单独发请求,再开多个进程消费它产生的数据
    htoooth
        3
    htoooth  
       2022-04-16 11:18:23 +08:00
    任务队列+线程池。或者直接线程池
    lscho
        4
    lscho  
       2022-04-16 11:33:42 +08:00
    不懂 python ,但是你写一个进程管理器,把网络请求的代码放到 fork 出来的子进程中执行,不就是多进程+异步了吗?

    nodejs 很多框架都是这种模式,我感觉 python 应该也有类似的库吧
    LeeReamond
        5
    LeeReamond  
       2022-04-16 15:12:15 +08:00
    “效率虽然已经很高,但是仍然没有发挥多核优势”,建议重新理解 IO 密集任务的含义。IO 密集场景指的是最终性能表现受限于你的基础设施(软件基础设施,硬件基础设施),你的信息收发模块按照它的设定逻辑,总共只能处理那么多的任务,你 CPU 跑的再快,塞再多任务它也处理不了,有什么用呢?

    你可以看到一些 TCP 通信框架跑分,用 C 语言写的框架每秒可以做到几十万次并发,但是 C 语言每秒可以修改 1 亿次三级缓存状态,所以为什么 CPU 跑的比单机通信跑分可以高好几个数量级,单机通信跑分最高还是只有几十万?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5652 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:46 · PVG 14:46 · LAX 22:46 · JFK 01:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.