为测试系统多线程并发操作时的响应,今天写了个简单的python脚本往mysql中插入、取出数据,用到了MySQLdb、threading模块。
其中threading模块是对thread模块的一个面向对象的封装,比较好用。
import MySQLdb import threading import sys def db_op_thread_func( i, num_of_op ): conn=MySQLdb.connect(host="x.x.x.x",port=x, user="xxxx",passwd="",db="xxxx") cursor = conn.cursor() sql = "select * from xxxx" for j in range(0, int(num_of_op) ): cursor.execute( sql ) print "thread", i, ":", " num:", j conn.close() if __name__ == "__main__": args = sys.argv num_of_thd = args[1] num_of_op = args[2] threads = [] for i in range( 0, int(num_of_thd) ): threads.append( threading.Thread( target=db_op_thread_func,args=(i, num_of_op ) ) ) for t in threads: t.start() for t in threads: t.join()
注意:
- 为防止主线程先于其它线程退出造成程序异常,需要调用 join() 函数,等待进程结束;
print语句的作用是为了了解程序运行情况,实时关注程序是否卡在了什么地方;- python程序获得命令行参数;
改进:
1,如果想模拟不同的操作,可以将若干sql语句写到一个字符串数组中,随机获取,放到线程中执行;
转载请注明:爱开源 » python模拟mysql多客户端并发操作