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

scrapy 的 item 队列把内存挤爆

  •  
  •   bwijn · 1 天前 · 1004 次点击

    scrapy 的 spider 抓取了很多 item 然后交给 pipeline, 但是 pipeline 处理的太慢了,我的业务很耗时,但是 spider 还在不停抓取,导致任务积压

    我目前打算使用 arq(异步消息框架) spider 抓到的 item 直接扔给 arq,扔之前查看任务队列是否过多,可以暂停发布任务

    各位有好的想法吗

    4 条回复    2025-01-30 05:11:21 +08:00
    Rang666
        1
    Rang666  
       1 天前 via Android
    内存不够就放硬盘存着?
    CaptainD
        2
    CaptainD  
       1 天前
    无非就几个方法
    1. 减缓 item 发布:例如你的方式,或者降低 spider 速度等
    2. 增大缓冲区,例如引入新的队列、持久化 pipeline 等
    3. 增大 pipeline 处理速度,并发或者异步等
    shuimugan
        3
    shuimugan  
       1 天前
    scrapy 出来的时候还没什么 serverless 的概念,都是靠堆机器的方式来增加抓取规模,但是它的 IO 和计算没有分离,必然造成你现在这个局面。
    一旦你加入队列来把 IO 和计算分离之后,你会发现你也用不上什么 scrapy 自己的东西了。
    除非你的清洗是视频转码之类的众生平等的耗时任务,如果是单纯搞搞字符串之类的,可以使用 cloudflare worker 把计算部分分离出去,甚至把 IO 部分也可以分离出去( IO 等待不计时,deno deploy 也是)。
    mayli
        4
    mayli  
       1 天前
    CONCURRENT_ITEMS
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   663 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 21:29 · PVG 05:29 · LAX 13:29 · JFK 16:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.