前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python + redis 实现 分布式队列任务

python + redis 实现 分布式队列任务

作者头像
kirin
发布2020-09-15 09:37:36
1.9K0
发布2020-09-15 09:37:36
举报
文章被收录于专栏:Kirin博客
代码语言:javascript
复制
import time
from queue import Queue  # 用于创建队列任务
import threading # 多线程
import redis # redis 模块
q=Queue() # 队列列表

red=redis.ConnectionPool(host="localhost",port=6379) # redis 连接池
r=redis.Redis(connection_pool=red) # redis 连接池实例

def gup(): # 生产者,产生任务丢到远程redis 维护一个队列,用于替代queue
    for x in range(100):
        r.lpush("list",x)

def gget():
    while True: # 进来首先判断一次列表长度,度过为0表示队列空了,退出
        ll=r.llen("list")
        print(ll)
        if ll==0:
            break
        try: # 增加代码健壮性
            a=r.lpop("list") # 维护的list 栈中弹出左侧的key
            print(a)
            time.sleep(2)
        except Exception as e:
            print(e)
            continue

def ma():
    for x in range(10): # 创建10个线程 ,充当线程池作用
        th=threading.Thread(target=gget)
        th.start()
    th.join()

if __name__ == '__main__':
    gup()
    time.sleep(1)
    ma()

代码很少,原理也挺简单的, 先用一个方法,生成任务,丢到redis里面进行维护, 然后用多线程,每次线程开始的时候都去查询redis 维护的栈(list)中是否为空, 不为空就代表有数据,那么就弹出第一个,如果为空就退出当前while ,结束当前进程 通过redis 来代替本地的queue队列,实现分布式,实现不复杂, 配合requests就可以实现自己diy的分布式爬虫。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/09/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档