我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python selenium redis队列提高效率

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python selenium redis队列提高效率

爬虫架构流程图(基于生产者消费模型)


爬虫架构二.png



整个程序被解耦成两部分:(先进先出,后进先出)

1  数据生产者  页面解析(获取url,title,状态码,图片地址,文本信息等等....) 使用(lpush或rpush,看需求而定)往reids队列中存数据

2  数据消费者  图片下载,计算图片dhash值  使用(blpop或brpop阻塞等待,如果redis队列中没有值,会一直阻塞) 或 lpop,rpop取redis队列中的数据,看需求而定


整个项目代码有点长,就不一一贴了,写关于reids的关键部分


数据生产者

def connect_redis_pool(self, url_dict):
    try:
        conn_pool = redis.ConnectionPool(host='ip地址', port=端口, db=0, password='redis密码')
        re_pool = redis.Redis(connection_pool=conn_pool)
        if re_pool:
            self.log.info("redis connect success")
            re_pool.lpush("img_info", json.dumps(url_dict))
            self.log.info("redis insert data img_info success")
    except Exception as e:
        self.log.error(e)


协程池开启多个协程往redis队列中存数据

from gevent import monkey;monkey.patch_all()
import gevent.pool
from link_spider import LinkSpider
import json


if __name__ == '__main__':
    url_list = []
    with open('linkurl.json', encoding='utf-8', mode='r') as f:
        all_content = json.loads(f.read())
        for i in all_content:
            url_list.append(i['link_url'])
    res_l = []
    p = gevent.pool.Pool(10)
    st = LinkSpider()
    for i in url_list:
        res_l.append(p.spawn(st.setup_chrome, i))
    gevent.joinall(res_l)



数据消费者

def connect_redis(redis_connection_number):
    try:
        conn_pool = redis.ConnectionPool(host='ip地址', port=端口, db=0, password='redis密码')
        re_pool = redis.Redis(connection_pool=conn_pool)
        result = re_pool.rpop("img_info")
        url_dict = json.loads(result)
        log.info("redis task:{} --> 执行任务:{}".format(redis_connection_number, url_dict['source_url']))
        all_url_dict = SaveData().download_img_and_hashlib(url_dict)
        SaveMysql().run(all_url_dict)
    except Exception as e:
        log.error(e)


异步线程池开启多个线程来下载图片,将最终结果保存到数据库中

import redis
import json
import time
from save_mysql import SaveMysql
from mylog import log
from multiprocessing import Pool
from get_redis_data import SaveData


if __name__ == '__main__':
    conn_pool = redis.ConnectionPool(host='ip地址', port=端口, db=0, password='redis密码')
    re_pool = redis.Redis(connection_pool=conn_pool)
    st = SaveData()
    p = Pool(10)
    res_l = []
    while True:
        time.sleep(3)
        # 查看redis队列数
        result = re_pool.llen("img_info")
        log.info("当前redis队列数: {}".format(result))
        if result >= 1:
            for i in range(result):
                res = p.apply_async(connect_redis, args=(i,))
                res_l.append(res)
            for res in res_l:
                res.get()
        else:
            continue

每隔3秒检测redis队列是否存在数据,有多少数据,就开启多少任务,然后调用线程池中的线程去执行,直到所有数据执行完毕,保存到mysql中


总结:通过对程序的解耦,将耗时的图片下载部分拿出来,另外去执行。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python selenium redis队列提高效率

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python selenium redis队列提高效率

爬虫架构流程图(基于生产者消费模型)整个程序被解耦成两部分:(先进先出,后进先出)1 数据生产者 页面解析(获取url,title,状态码,图片地址,文本信息等等....) 使用(lpush或rpush,看需求而定)往reids队列中存数据
2023-01-30

laravel自带队列效率怎么提升

要提升Laravel队列的效率,可以考虑以下几个方面:1. 使用适当的队列驱动器:Laravel支持多种队列驱动器,如数据库、Redis、Beanstalkd等。选择适合你应用的队列驱动器可以提升队列的效率。2. 配置队列工作进程数量:在L
2023-09-06

Redis队列丢失率升高怎么解决

当Redis队列的丢失率升高时,可以考虑以下几个方面来解决问题:1. 检查配置:首先,检查Redis的配置是否合理。例如,检查maxmemory配置是否合适,如果maxmemory过小,可能导致队列数据被强制清除;检查maxclients配
2023-09-16

如何提高python效率

这篇“如何提高python效率”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“如何提高python效率”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。
2023-06-06

redis同时读写效率怎么提高

要提高Redis的同时读写效率,可以采取以下几个方法:1. 使用多个Redis实例:可以将读写操作分散到多个Redis实例上,减轻单个Redis实例的负载压力。可以通过使用Redis集群或者主从复制来实现多个实例。2. 使用Pipeline
2023-08-24

怎么使用redis提高缓存效率

以下是一些使用Redis提高缓存效率的方法:1. 设置合适的过期时间:在将数据存储到Redis缓存中时,可以为每个数据设置一个过期时间。这样可以确保缓存中的数据不会过期太快或太慢,从而提高缓存的效率。2. 使用合适的数据结构:Redis支持
2023-09-05

教你使用GitHub来提高团队协作效率

在现代软件开发行业中,GitHub已成为了一个普遍应用的版本控制、协作平台,被广泛应用于各种规模的项目开发中。本文将为大家介绍如何使用GitHub来提高团队协作效率,从版本控制、代码管理、协作流程的角度来分析。一、版本控制GitHub的主要
2023-10-22

怎么提高 Python 开发效率

本篇内容介绍了“怎么提高 Python 开发效率”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Sublime Text中支持Python运
2023-06-15

Python利用IPython提高开发效率

一、IPython 简介 IPython 是一个交互式的 Python 解释器,而且它更加高效。它和大多传统工作模式(编辑 -> 编译 -> 运行)不同的是, 它采用的工作模式是:执行 -> 探索 ,而大部分和数据分析相关的代 码都含有探索
2022-06-04

如何提高python爬虫采集的效率

这篇文章将为大家详细讲解有关如何提高python爬虫采集的效率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、让爬虫使用多线程,计算机要有足够的内存。同时也要使用代理IP,代理IP要找稳定在线的那种,这
2023-06-20

提高Python运行效率的六个窍门

Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此,它还轻松支持多任务处理,比如多进程。不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。尝试以下六个窍门,来为你的Python应
2023-01-31

Python提高运维效率的脚本分享

哈喽大家好我是咸鱼,今天给大家分享一个能够提升运维效率的 python 脚本咸鱼平常在工作当中通常会接触到下面类似的场景:容灾切换的时候批量对机器上的配置文件内容进行修改替换对机器批量替换某个文件中的字段对于 Linux 机器,咸鱼可
2023-05-12

python中如何使用GPU大幅提高效率

本篇文章给大家分享的是有关python中如何使用GPU大幅提高效率,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。cupy我觉得可以理解为cuda for numpy,安装方式p
2023-06-25

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录