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

时间:2022-07-24
本文章向大家介绍python + redis 实现 分布式队列任务,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
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的分布式爬虫。