python多线程操作MySQL数据库pymysql

项目中使用多线程操作数据库提示错误:pymysql.err.InterfaceError: (0, ”),原因是pymysql的execute有独占锁机制,解决办法是每个线程单独一个数据库连接,为线程增加一个数据库连接池,改进之后的一个简版实例:

import pymysql

import threading

class Db(object):

def __init__(self, host=None, username=None, pwd=None, dbname=None):

self.pool = {}

self.host = host

self.username = username

self.pwd = pwd

self.dbname = dbname

def get_instance(self, ):

name = threading.current_thread().name

if name not in self.pool:

conn = pymysql.connect(self.host, self.username, self.pwd, self.dbname)

self.pool[name] = conn

return self.pool[name]

class Test(object):

def __init__(self):

self.max_id = 10000

self.start_id = 1

self.db = Db('localhost', 'root', '123456', 'test')

self.lock = threading.Lock()

self.main()

def main(self):

threads = []

for i in range(150):

t = threading.Thread(target=self.insert_data)

t.start()

threads.append(t)

for t in threads:

t.join()

def insert_data(self):

db = self.db.get_instance()

cursor = db.cursor()

while True:

if self.start_id >= self.max_id:

break

s = self.start_id

with self.lock:

self.start_id += 50

if self.start_id > self.max_id:

self.start_id = self.max_id

e = self.start_id

for i in range(s, e):

sql = 'insert into archives(`id`) values(%s)' % (i,)

try:

cursor.execute(sql)

db.commit()

print(threading.current_thread().name, ': ', sql, ': success')

except:

db.rollback()

print(threading.current_thread().name, ': ', sql, ':failed')

raise

if __name__ == '__main__':

Test()

本实例运用了多线程的锁机制,实例很典型,适合多线程处理同一批数据时使用

python多线程读取数据库数据_python多线程操作MySQL数据库pymysql相关推荐

  1. js修改mysql数据库数据_Node.js操作mysql数据库增删改查

    关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...

  2. 读取股票数据存储到本地MySQL数据库(三)

    此篇是将上篇获取到的股票数据存储到本地mysql数据库. mysql是关系型数据库,为Oracle旗下产品,开源免费.首先下载mysql的安装包,安装完成后设置数据库并启动服务,然后可以通过Navic ...

  3. java 读取mysql数据库_原生Java操作mysql数据库过程解析

    这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.引入数据库驱动的jar包 以通过mav ...

  4. mysql操作数据库的步骤,Golang操作MySql数据库的完整步骤记录

    前言 MySQL是业界常用的关系型数据库,在平时开发中会经常与MySql数据库打交道,所以在接下来将介绍怎么使用Go语言操作MySql数据库. 下载MySql连接驱动 Go语言中的database/s ...

  5. c 连接mysql批量存储数据库_C语言连接操作MySQL数据库的方法

    C语言连接操作MySQL数据库的方法 2014-07-13 16:20来源:中国存储网 导读:C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这 ...

  6. php如何操作mysql数据库代码_php如何操作mysql数据库的类(附代码)

    这篇文章主要介绍了php简单操作mysql数据库的类,涉及php操作mysql的连接.查询.插入.删除等基本操作方法,非常具有实用价值,需要的朋友可以参考下.<?php /** * Databa ...

  7. python获取redis数据_Python之操作redis数据库

    使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...

  8. python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...

    本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...

  9. python操作mysql数据库 内存占用100_python操作MySQL数据库

    python标准数据库接口为Python DB-API,为开发人员提供了数据库应用编程接口 DB-API是一个规范,定义了一系列必须的对象和数据库存取方式, 便于各种各样的底层数据库系统和多种多样的数 ...

最新文章

  1. NestedScrolling CoordinatorLayout
  2. python多线程怎么写日志_Python日志记录在多进程下的使用
  3. Redis中的zset 有序集合
  4. C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻
  5. 没有dpkg命令_ffsend:在命令行中通过 FireFox Send 分享文件 | Linux 中国
  6. xp 设备管理器 android,XP设备管理器怎么打开?
  7. ALTER 简单操作(mysql)
  8. php 计算 目录大小,php计算整个目录大小的方法
  9. linux安装DNS服务命令,Linux下的安装和配置DNS服务器
  10. [hashmap|空间换时间] leetcode 1 两数之和
  11. php二维码与电子名片
  12. Ext JS 4 架构你的应用 第2节 (官方文档翻译)
  13. MFC双人五子棋(VS2019)
  14. Only fullscreen opaque activities can request orientation比较完美的解决方法,黑白屏问题解决
  15. Django + vue 开发接口自动化可视化平台
  16. 2020计算机保研经历
  17. mvc原理和mvc模式的优缺点
  18. 软件测试常用文档规范
  19. 独享IP有什么特点?
  20. SSL数字证书下载流程是怎么样的

热门文章

  1. 推荐系统(工程方向)-策略平台
  2. 高并发Web服务的演变:节约系统内存和CPU
  3. 深度学习在美图个性化推荐的应用实践
  4. Elasticsearch大文件搜索
  5. Java 理论与实践: 流行的原子
  6. outlook错配置账户到exchange后的删除办法
  7. 针对.NET开发者(neo-charm) 1.0 的NEO区块链架构参考模型
  8. 张小龙做微信公众号APP,对自媒体是祸还是福?
  9. Fis3的前端工程化之路[三大特性篇之资源定位]
  10. 将外部准备好的sqlite导入到项目当中