[python]gevent+PyMysql实现mysql并行查询

PyMysql是pure python的mysql驱动,因此可以通过gevent实现协程化,从而实现基于协程的mysql查询.

比基于多线程的连接池效率更高.(单纯查询场景,不考虑读写混合的事务问题)

测试代码参考峰云的博客.

在win7, python2/3环境测试通过

#!/usr/bin/python
# -*- coding: utf-8 -*-
#测试gevent+PyMysql实现非阻塞查询
import gevent
#from gevent import socket     #单纯这样是不行的
import pymysql
from gevent import monkey
#monkey.patch_all()            #可以
monkey.patch_socket()          #只patch_socket就可以


def nbquery(sql):
    db = pymysql.connect(host = '192.168.5.125', passwd = '111', user = 'root', db= 'test')
    cursor = db.cursor()
    data = cursor.execute(sql)
    cursor.close()
    db.close()
    return cursor
sqla='select count(*) from person'
sqlb="select * from person where name like '%abc%'"
sqlc="SELECT SLEEP(5)"
#jobs = [gevent.spawn(nbquery, (sqla)),gevent.spawn(nbquery, (sqlb))]
jobs = [gevent.spawn(nbquery, (sqlc)),gevent.spawn(nbquery,(sqlc)),gevent.spawn(nbquery,(sqlc))]
gevent.joinall(jobs, timeout=10)
what_you_want = [job.value for job in jobs]
print(what_you_want)
#for i in what_you_want:
#    for a in i:
#        print a

#
#D:\fk\work\python\gevent\mysql>python tgmysql.py
#[<pymysql.cursors.Cursor object at 0x0000000002D4FB38>, <pymysql.cursors.Cursor
#object at 0x0000000002D4FDD8>, <pymysql.cursors.Cursor object at 0x0000000002D4F
#EB8>]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值