首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
华为云
V2EX  ›  Python

asyncio 怎么与 redis 队列协同?

  •  
  •   867810107 · 62 天前 · 726 次点击
    这是一个创建于 62 天前的主题,其中的信息可能已经有所发展或是发生改变。

    问题描述

    我有一个进程会不断地往 redis 队列里增加数据,上限是 5000.然后我想在另一个进程中用 asyncio 从该队列里取出 item,里面有 url 然后请求 api 获得数据。请问我应该怎么控制我的爬取进程每一次只运行一定数目的协程(比如 20 )呢?具体应该怎么写呢?就是怎么从队列获得数据然后发起请求,同时又不能同时运行太多协程。

    3 回复  |  直到 2018-09-16 16:20:16 +08:00
        1
    gaius   62 天前
    单线程定时取 redis,然后丢线程池运行请求 task ?
        2
    ifoolish   62 天前 via iPhone
    用 asyncio.Semaphore 控制协程数
        3
    kuokyong   59 天前
    第一:需要异步库确保 IO 是异步的 https://github.com/aio-libs/aioredis
    第二控制,协程数据和其它多进程 /线程,调度方式类似。一种是提前创建固定数量协程,不断去读数据。 另外就是两个数据建个调度个协程,.create_task/ensure_future. 达到上限就停止,或者用 Semaphore
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3095 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 20ms · UTC 04:09 · PVG 12:09 · LAX 20:09 · JFK 23:09
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1