iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python selenium redis队列提高效率
  • 877
分享到

python selenium redis队列提高效率

队列提高效率python 2023-01-30 23:01:43 877人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

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

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


爬虫架构二.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中


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

--结束END--

本文标题: python selenium redis队列提高效率

本文链接: https://www.lsjlt.com/news/180446.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • python selenium redis队列提高效率
    爬虫架构流程图(基于生产者消费模型)整个程序被解耦成两部分:(先进先出,后进先出)1  数据生产者  页面解析(获取url,title,状态码,图片地址,文本信息等等....) 使用(lpush或rpush,看需求而定)...
    99+
    2023-01-30
    队列 提高效率 python
  • laravel自带队列效率怎么提升
    要提升Laravel队列的效率,可以考虑以下几个方面:1. 使用适当的队列驱动器:Laravel支持多种队列驱动器,如数据库、Red...
    99+
    2023-09-06
    laravel
  • Redis队列丢失率升高怎么解决
    当Redis队列的丢失率升高时,可以考虑以下几个方面来解决问题:1. 检查配置:首先,检查Redis的配置是否合理。例如,检查max...
    99+
    2023-09-16
    Redis
  • 如何提高python效率
    这篇“如何提高python效率”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“如何提高python效率”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。...
    99+
    2023-06-06
  • 在PHP中使用Memcache缓存技术提高优先队列的效率
    随着社会的不断发展,人们对于计算机技术的要求也变得越来越高。在计算机中,队列是一种非常重要的数据结构,能够帮助我们高效地解决很多问题。然而,在实际的应用过程中,队列的效率却往往会受到一些因素的限制,比如网络的延迟、查询数据库的速度等等。所以...
    99+
    2023-05-17
    PHP Memcache 优先队列
  • 怎么使用redis提高缓存效率
    以下是一些使用Redis提高缓存效率的方法:1. 设置合适的过期时间:在将数据存储到Redis缓存中时,可以为每个数据设置一个过期时...
    99+
    2023-09-05
    redis
  • redis同时读写效率怎么提高
    要提高Redis的同时读写效率,可以采取以下几个方法:1. 使用多个Redis实例:可以将读写操作分散到多个Redis实例上,减轻单...
    99+
    2023-08-24
    redis
  • 教你使用GitHub来提高团队协作效率
    在现代软件开发行业中,GitHub已成为了一个普遍应用的版本控制、协作平台,被广泛应用于各种规模的项目开发中。本文将为大家介绍如何使用GitHub来提高团队协作效率,从版本控制、代码管理、协作流程的角度来分析。一、版本控制GitHub的主要...
    99+
    2023-10-22
  • 怎么提高 Python 开发效率
    本篇内容介绍了“怎么提高 Python 开发效率”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Sublime Text中支持Python运...
    99+
    2023-06-15
  • 如何提高InnoDB表BLOB列的存储效率
    如何提高InnoDB表BLOB列的存储效率,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 0、导读 强烈建议不要在InnoDB中存储TE...
    99+
    2024-04-02
  • 如何提高CSS效率
    小编给大家分享一下如何提高CSS效率,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!相对单位 聪明又有前瞻头脑的开发者们已经使用相对单位了—&a...
    99+
    2023-06-08
  • 怎么提高Debug效率
    本篇内容介绍了“怎么提高Debug效率”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!缩小问题范围缩小问题范...
    99+
    2024-04-02
  • PythonPyWebIO提升团队效率使用介绍
    目录引言简介Step one:本地文件上传Step two:风险值卡控Step Three: 标签卡控总结引言 Q&A快速了解PyWebIO Q:首先,什么是PyWebIO...
    99+
    2023-01-06
    Python PyWebIO效率提升 Python PyWebIO
  • Python提高运维效率的脚本分享
    哈喽大家好我是咸鱼,今天给大家分享一个能够提升运维效率的 python 脚本 咸鱼平常在工作当中通常会接触到下面类似的场景: 容灾切换的时候批量对机器上的配置文件内容进行修改替换对机...
    99+
    2023-05-12
    Python提高运维效率脚本 Python运维脚本 Python脚本
  • 提高Python运行效率的六个窍门
    Python是一门优秀的语言,它能让你在短时间内通过极少量代码就能完成许多操作。不仅如此,它还轻松支持多任务处理,比如多进程。不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。尝试以下六个窍门,来为你的Python应...
    99+
    2023-01-31
    窍门 效率 Python
  • 如何提高python爬虫采集的效率
    这篇文章将为大家详细讲解有关如何提高python爬虫采集的效率,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、让爬虫使用多线程,计算机要有足够的内存。同时也要使用代理IP,代理IP要找稳定在线的那种,这...
    99+
    2023-06-20
  • Python中的Deque: 实现高效的队列和堆栈
    Python 中的 deque 是一个低级别的、高度优化的双端队列,对于实现优雅、高效的Pythonic 队列和堆栈很有用,它们是计算中最常见的列表式数据类型。本文中,云朵君将和大家一起学习如下:开始使用deque有效地弹出和追加元素访问d...
    99+
    2023-05-14
    Python 队列
  • 利用 JavaScript Webpack 提升团队协作效率
    JavaScript Webpack 是一款功能强大的前端构建工具,它能够将多个 JavaScript 模块打包成一个完整文件,从而提高网站的加载速度。Webpack 不仅支持模块化开发,还支持代码管理和自动化构建,帮助团队成员提高开发...
    99+
    2024-02-24
    JavaScript Webpack 团队协作 开发效率
  • 如何提高redis缓存命中率
    这篇文章给大家分享的是有关如何提高redis缓存命中率的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。缓存命中率的介绍命中:可以直接通过缓存获取到需要的数据。不命中:无法直接通过缓...
    99+
    2024-04-02
  • python中如何使用GPU大幅提高效率
    本篇文章给大家分享的是有关python中如何使用GPU大幅提高效率,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。cupy我觉得可以理解为cuda for numpy,安装方式p...
    99+
    2023-06-25
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作