python多线程读取数据库数据_python多线程操作MySQL数据库pymysql
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相关推荐
- js修改mysql数据库数据_Node.js操作mysql数据库增删改查
关于node.js操作mysql数据库的相关介绍请阅读全文吧.下文介绍的非常详细,具体内容如下所示: 安装mysql模块 npm install mysql 数据库准备 mysql server所在的 ...
- 读取股票数据存储到本地MySQL数据库(三)
此篇是将上篇获取到的股票数据存储到本地mysql数据库. mysql是关系型数据库,为Oracle旗下产品,开源免费.首先下载mysql的安装包,安装完成后设置数据库并启动服务,然后可以通过Navic ...
- java 读取mysql数据库_原生Java操作mysql数据库过程解析
这篇文章主要介绍了原生Java操作mysql数据库过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.引入数据库驱动的jar包 以通过mav ...
- mysql操作数据库的步骤,Golang操作MySql数据库的完整步骤记录
前言 MySQL是业界常用的关系型数据库,在平时开发中会经常与MySql数据库打交道,所以在接下来将介绍怎么使用Go语言操作MySql数据库. 下载MySql连接驱动 Go语言中的database/s ...
- c 连接mysql批量存储数据库_C语言连接操作MySQL数据库的方法
C语言连接操作MySQL数据库的方法 2014-07-13 16:20来源:中国存储网 导读:C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这 ...
- php如何操作mysql数据库代码_php如何操作mysql数据库的类(附代码)
这篇文章主要介绍了php简单操作mysql数据库的类,涉及php操作mysql的连接.查询.插入.删除等基本操作方法,非常具有实用价值,需要的朋友可以参考下.<?php /** * Databa ...
- python获取redis数据_Python之操作redis数据库
使用redis模块 一.操作redis 1.添加信息 (1)直接建key-value信息: 右键-Add New Key,手动添加key和value 右键-Console,打开控制台,写入命令 (2) ...
- python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...
本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...
- python操作mysql数据库 内存占用100_python操作MySQL数据库
python标准数据库接口为Python DB-API,为开发人员提供了数据库应用编程接口 DB-API是一个规范,定义了一系列必须的对象和数据库存取方式, 便于各种各样的底层数据库系统和多种多样的数 ...
最新文章
- NestedScrolling CoordinatorLayout
- python多线程怎么写日志_Python日志记录在多进程下的使用
- Redis中的zset 有序集合
- C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻
- 没有dpkg命令_ffsend:在命令行中通过 FireFox Send 分享文件 | Linux 中国
- xp 设备管理器 android,XP设备管理器怎么打开?
- ALTER 简单操作(mysql)
- php 计算 目录大小,php计算整个目录大小的方法
- linux安装DNS服务命令,Linux下的安装和配置DNS服务器
- [hashmap|空间换时间] leetcode 1 两数之和
- php二维码与电子名片
- Ext JS 4 架构你的应用 第2节 (官方文档翻译)
- MFC双人五子棋(VS2019)
- Only fullscreen opaque activities can request orientation比较完美的解决方法,黑白屏问题解决
- Django + vue 开发接口自动化可视化平台
- 2020计算机保研经历
- mvc原理和mvc模式的优缺点
- 软件测试常用文档规范
- 独享IP有什么特点?
- SSL数字证书下载流程是怎么样的