• 爬虫 异步数据写入框架 (adbapi)


    数据库pymysql的commit()和execute()在提交数据时,都是同步提交至数据库,由于scrapy框架数据的解析和异步多线程的,所以scrapy的数据解析速度,要远高于数据的写入数据库的速度。如果数据写入过慢,会造成数据库写入的阻塞,影响数据库写入的效率。
    通过多线程异步的形式对数据进行写入,可以提高数据的写入速度。


    使用twisted异步IO框架,实现数据的异步写入。
    from twisted.enterprise import adbapi
    
    
    # 初始化数据库连接池(线程池)
    # 参数一:mysql的驱动
    # 参数二:连接mysql的配置信息
    dbpool = adbapi.ConnectionPool('pymysql', **params)
    参数1:在异步任务中要执行的函数insert_db;
    参数2:给该函数insert_db传递的参数
    query = self.dbpool.runInteraction(self.insert_db, item)
    def insert_db(self, cursor, item):
          insert_sql = "INSERT INTO bole(title, date_time, tags, content, zan_num, keep_num, comment_num, img_src, img_path) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
            cursor.execute(insert_sql, (item['title'], item['date_time'], item['tags'], item['content'], item['zan_num'], item['keep_num'], item['comment_num'], item['img_src'], item['img_path']))
    
           在execute()之后,不需要再进行commit(),连接池内部会进行提交的操作。


     
  • 相关阅读:
    bzoj4537: [Hnoi2016]最小公倍数
    bzoj4331: JSOI2012 越狱老虎桥
    bzoj4558: [JLoi2016]方
    bzoj4209: 西瓜王
    bzoj2653: middle
    bzoj4671: 异或图
    bzoj4771: 七彩树
    shell java应用启动脚本(app.sh)
    Springboot 构建http服务,返回的http行是'HTTP/1.1 200' 无状态码描述 客户端解析错误
    MariaDB(Mysql)-主从搭建
  • 原文地址:https://www.cnblogs.com/eunuch/p/9308520.html
Copyright © 2020-2023  润新知