#!/usr/bin/python3

# -*- coding: utf-8 -*-

import requests

import gevent

import pymysql

from gevent import monkey

# 堵塞标记

monkey.patch_all()

class SqlSave(object):

"""协程方式写入数据库"""

def __init__(self):

SQL_DBA = {

‘host‘: ‘localhost‘,

‘db‘: ‘jobole‘,

‘user‘: ‘root‘,

‘password‘: ‘jiayuan95814‘,

‘use_unicode‘: True,

‘charset‘: ‘utf8‘

}

self.conn = pymysql.connect(**SQL_DBA)

self.cursor = self.conn.cursor()

def process_item(self):

sql = self.__get_sql()

print(sql)

# 协程对数据库操作

gevent.joinall([

gevent.spawn(self.__go_sql, sql),

])

def __go_sql(self, sql):

self.cursor.execute(sql)

self.conn.commit()

def __get_sql(self):

# 测试数据

return """insert into article(cont_id, cont_url, title, publish_time, cont, img_url, img_path, like_num, collection_num, comment_num) value (‘d374f2fc6bd013a58513687fe2fe4e97‘,‘http://blog.jobbole.com/111866/‘,‘DB 分库分表(2):全局主键生成策略‘,‘2017-07-16‘,‘原文出处:Laurence的技术博客本文将主要介绍一些常见的全局主键生成策略,然后重点介绍flickr使用的一种非常优秀的全局主键生成方案。关于分库分表(sharding)的拆分策略和实施细则,请参考该系列的前一篇文章:DB 分库分表(1):拆分实施策略和示例演示第一部分:一些常见的主键生成策略一旦数据库被切分到多个物理结点上,我们将不能再依赖数据库自身的主键生成机制。一方面,某个分区数据库自生成的ID无法保证在全局上是唯一的;另一方面,应用程序在插入数据之前需要先获得ID,以便进行SQL路由。目前几种可行的主键生成策略有:1. UUID:使用UUID作主键是最简单的方案,但是缺点也是非常明显的。由于UUID非常的长,除占用大量存储空间外,最主要的问题是在索引上,在建立索引和基于索引进行查询时都存在性能问题。2. 结合数据库维护一个Sequence表:此方案的思路也很简单,在数据库中建立一个Sequence表,表的结构类似于:CREATE TABLE `SEQUENCE` (

`tablename` varchar(30) NOT NULL,

`nextid` bigint(20) NOT NULL,

PRIMARY KEY (`tablename`)

) ENGINE=InnoDB12345CREATETABLE`SEQUENCE`(`tablename`varchar(30)NOTNULL,`nextid`bigint(20)NOTNULL,PRIMARYKEY(`tablename`))ENGINE=InnoDB每当需要为某个表的新纪录生成ID时就从Sequence表中取出对应表的nextid,并将nextid的值加1后更新到数据库中以备下次使用。此方案也较简单,但缺点同样明显:由于所有插入任何都需要访问该表,该表很容易成为系统性能瓶颈,同时它也存在单点问题,一旦该表数据库失效,整个应用程序将无法工作。有人提出使用Master-Slave进行主从同步,但这也只能解决单点问题,并不能解决读写比为1:1的访问压力问题。除此之外,还有一些方案,像对每个数据库结点分区段划分ID,以及网上的一些ID生成算法,因为缺少可操作性和实践检验,本文并不推荐。实际上,接下来,我们要介绍的是Fickr使用的一种主键生成方案,这个方案是目前我所知道的最优秀的一个方案,并且经受了实践的检验,可以为大多数应用系统所借鉴。第二部分:一种极为优秀的主键生成策略flickr开发团队在2010年撰文介绍了flickr使用的一种主键生成测策略,同时表示该方案在flickr上的实际运行效果也非常令人满意,原文连接:Ticket Servers: Distributed Unique Primary Keys on the Cheap这个方案是我目前知道的最好的方案,它与一般Sequence表方案有些类似,但却很好地解决了性能瓶颈和单点问题,是一种非常可靠而高效的全局主键生成方案。图1. flickr采用的sharding主键生成方案示意图(点击查看大图)flickr这一方案的整体思想是:建立两台以上的数据库ID生成服务器,每个服务器都有一张记录各表当前ID的Sequence表,但是Sequence中ID增长的步长是服务器的数量,起始值依次错开,这样相当于把ID的生成散列到了每个服务器节点上。例如:如果我们设置两台数据库ID生成服务器,那么就让一台的Sequence表的ID起始值为1,每次增长步长为2,另一台的Sequence表的ID起始值为2,每次增长步长也为2,那么结果就是奇数的ID都将从第一台服务器上生成,偶数的ID都从第二台服务器上生成,这样就将生成ID的压力均匀分散到两台服务器上,同时配合应用程序的控制,当一个服务器失效后,系统能自动切换到另一个服务器上获取ID,从而保证了系统的容错。关于这个方案,有几点细节这里再说明一下:1. flickr的数据库ID生成服务器是专用服务器,服务器上只有一个数据库,数据库中表都是用于生成Sequence的,这也是因为auto-increment-offset和auto-increment-increment这两个数据库变量是数据库实例级别的变量。2. flickr的方案中表格中的stub字段只是一个char(1) NOT NULL存根字段,并非表名,因此,一般来说,一个Sequence表只有一条纪录,可以同时为多张表生成ID,如果需要表的ID是有连续的,需要为该表单独建立Sequence表。3. 方案使用了MySQL的LAST_INSERT_ID()函数,这也决定了Sequence表只能有一条记录。4. 使用REPLACE INTO插入数据,这是很讨巧的作法,主要是希望利用mysql自身的机制生成ID,不仅是因为这样简单,更是因为我们需要ID按照我们设定的方式(初值和步长)来生成。5. SELECT LAST_INSERT_ID()必须要于REPLACE INTO语句在同一个数据库连接下才能得到刚刚插入的新ID,否则返回的值总是06. 该方案中Sequence表使用的是MyISAM引擎,以获取更高的性能,注意:MyISAM引擎使用的是表级别的锁,MyISAM对表的读写是串行的,因此不必担心在并发时两次读取会得到同一个ID(另外,应该程序也不需要同步,每个请求的线程都会得到一个新的connection,不存在需要同步的共享资源)。经过实际对比测试,使用一样的Sequence表进行ID生成,MyISAM引擎要比InnoDB表现高出很多!7. 可使用纯JDBC实现对Sequence表的操作,以便获得更高的效率,实验表明,即使只使用springJDBC性能也不及纯JDBC来得快!实现该方案,应用程序同样需要做一些处理,主要是两方面的工作:1. 自动均衡数据库ID生成服务器的访问2. 确保在某个数据库ID生成服务器失效的情况下,能将请求转发到其他服务器上执行。1赞收藏评论‘,‘http://jbcdn2.b0.upaiyun.com/2017/03/4bae6998d00f180d42c7da716e3d0bb2.jpg‘,‘full/117976068e2e847f1067d25ea3fa90a3b5a60f3f.jpg‘, 1, 0, 0)"""

if __name__ == ‘__main__‘:

s = SqlSave()

s.process_item()

原文:http://www.cnblogs.com/2bjiujiu/p/7223187.html

python协程池操作mysql_python_协程方式操作数据库相关推荐

  1. python小程序嵌入excel_用原生的方式操作Excel,Python玩转Excel神器xlsxwriter详解!...

    大家好,在之前的Python办公自动化系列文章中,我们已经介绍了两个Python操作Excel的库openpyxl与xlwings,并且相信大家已经了解这两者之间的异同. 但是在Python中操作Ex ...

  2. 白话 Golang 协程池

    文章目录 1.何为并发 2.并发的好处 3.Go 如何并发 4.G-P-M 调度模型 5.Go 程的代价 6.协程池的作用 7.简易协程池的设计&实现 8.开源协程池的使用 9.小结 参考文献 ...

  3. Go语言 有缓冲通道、协程池

    文章目录 导言 有缓冲通道.线程池 有缓冲通道是什么? 例子 另一个例子 死锁 容量 vs 长度 WaitGroup 实现协程池 1. 创建数据结构 2. 创建相关函数 1. `digits`函数 2 ...

  4. java基于quasar实现协程池

    业务场景:golang与swoole都拥抱了协程,在同任务并发数量下,协程可比线程多几倍.所以最近在查询java时了解java本身是没有协程的,但是某牛自行实现了协程,也就是本文的主角quasar(纤 ...

  5. 连接池和协程池为何能提升并发能力?

    你有没有发现,"内存池"和"进程池"都带有"池"字?其实,这两种技术都属于"池化技术".它通常是由系统预先分配一批资源并 ...

  6. Golang并发模型:轻松入门协程池

    goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理.但有时候,我们还是想控制一下. 比如,我们有A.B两类工作,不想把太多资源花费在B类务上,而 ...

  7. 应用调优常用技巧-線程池

    应用调优常用技巧-線程池 应用调优常用技巧 - 线程池 線程池的好處 核心API-操作類 核心API-監控類 2-2 线程池BlockingQueue详解.选择与调优 調優技巧 2-3 线程池Sche ...

  8. 綫程池 部分代碼實現 筆記

    計算機中常用的池(池式結構) 内存池 數據庫連接池 請求池 消息隊列(消息池) 對象池 緩衝區 綫程池解決問題 異步解耦的作用,如讀寫磁盤,檢測IO 綫程池三個部分 1 多個綫程s 2 多個任務 3 ...

  9. python协程池操作mysql_在python中使用aiomysql异步操作mysql

    之前一直在使用mongo与redis,最近在项目中开始使用mysql数据库,由于现在的项目是全程异步的操作,所以在在网上查了下关于在python中异步的操作mysql,找来找去最后发现aiomysql ...

最新文章

  1. 【ACM】杭电OJ 2030
  2. 解决xe7无法找到system.pas的问题
  3. idea集成spring+spring MVC+mybatis问题
  4. Spring框架中的9种设计模式汇总
  5. .NET Remoting开发系列:(三) Remoting服务发布方式
  6. 数据结构期末复习之平衡二叉树
  7. 4轮拿下字节Offer,面试题复盘(含答案)
  8. 蓝点中文Linux2.0 实验十三 进程与作业管理
  9. 通信原理第六章思维导图
  10. 效率直接起飞的PPT技巧,你知道吗
  11. NaiveBayes
  12. 基于Dragonboard 410c的PMIC简介
  13. 持续集成服务 Travis CI 教程
  14. SQL Server AlwaysOn读写分离配置
  15. Windows 11 应用商店打不开,点了没反应解决办法,亲测可用
  16. 2019大数据领域十大必读书籍
  17. 批处理注销计算机当前用户名,批处理实现重起和注销的指令是什么?
  18. 华为ensp保存网络设备配置和导出导入网络设备
  19. 用计算机图形画一个杯子的代码,六年级LOGO小海龟编程教程.doc
  20. linux中文件在外存的物理地址放在,Linux文件系统中,文件在外存的物理地址放在 ( ) 中...

热门文章

  1. [渝粤教育] 中国地质大学 大学英语(1) 复习题
  2. 【渝粤题库】陕西师范大学300018 世界史(下)
  3. 【渝粤题库】陕西师范大学292241金融市场学Ⅰ 作业(高起专)
  4. 2021年春季学期期末统.考试 公司概论 试题
  5. 初识斯蒂尔杰斯积分(Stieltjes integral)
  6. php5.6 连接 oracle,XAMPP中PHP5.6.3连接Oracle
  7. 倍福嵌入式控制器PLC各型号简介
  8. linux抓包提示没有权限,linux下wireshark不用sudo权限抓包包
  9. SwipeRefreshLayout官方推荐下拉刷新
  10. linux应用程序是什么,linux下c开发了一个应用程序,它的扩展名是什么?