异步存储的原因及demo

同步:写入数据速度比较慢,而爬虫速度比较快,可能导致数据最后写入不到数据库中
异步:是将爬虫的数据先放入一个携程内存连接池中,再同时将连接池的数据写入到数据库中,这样既可以提高数据库的写入速度,同时也可以将爬取到的所有数据都写入进数据库,能保证数据的完整性
#导包
import gevent
#猴子补丁
from gevent import monkey
monkey.patch_all()
from d8_db import ConnectMysql
import time
import pymysql


#定义入库类
class MyInsert(object):

    #定义入库方法(同步)
    def insert_line(self,my_connect):
        #定义游标对象
        cursor = my_connect.cursor()
        #入库操作
        for item in range(10001):
            #print(item)
            cursor.execute(" insert into `spider_data` values ('%s','%s')  " % ('123','123'))
            my_connect.commit()
        cursor.close()
        my_connect.close()
        #读库
        #cursor.execute(' select * from student ')
        #res = cursor.fetchall()
        #print(res)

#协程入库
class MyInsertGevent(object):

    #定义初始化方法
    #def __init__(self,my_connect):
    #    self.my_connect = my_connect

    #定义协程入库方法
    def insert_gevent(self,startnum,endnum):

        conn = pymysql.connect(host='localhost',user='root',password='123456',database='mymac',charset='utf8')
        #定义游标对象
        cursor = conn.cursor()
        #入库操作
        for item in range(startnum,endnum):
            cursor.execute(" insert into `spider_data` values ('%s','%s')  " % ('123','123'))
            conn.commit()
        cursor.close()
        conn.close()


if __name__ == "__main__":
    #实例化第一个对象
    connectmysql = ConnectMysql()
    conn = connectmysql.connect_mysql()
    #实例化第二个对象
    print('start at %s' % time.ctime())
    #myinsert = MyInsert()
    #myinsert.insert_line(conn)
    #实例化协程入库
    myinsertgevent = MyInsertGevent()
    gevent.joinall([
        gevent.spawn(myinsertgevent.insert_gevent,1,2000),
        gevent.spawn(myinsertgevent.insert_gevent,2001,4000),
        gevent.spawn(myinsertgevent.insert_gevent,4001,5000),
        gevent.spawn(myinsertgevent.insert_gevent,5001,8000),
        gevent.spawn(myinsertgevent.insert_gevent,8001,10000),
    ])
    print('end at %s' % time.ctime())

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值