為測試系統多線程並行作業時的響應,今天寫了個簡單的python指令碼往mysql中插入、取出資料,用到了MySQLdb、threading模組。
其中threading模組是對thread模組的一個物件導向的封裝,比較好用。
import MySQLdb<br />import threading<br />import sys<br />def db_op_thread_func( i, num_of_op ):<br /> conn=MySQLdb.connect(host="x.x.x.x",port=x, user="xxxx",passwd="",db="xxxx")<br /> cursor = conn.cursor()<br /> sql = "select * from xxxx"<br /> for j in range(0, int(num_of_op) ):<br /> cursor.execute( sql )<br /> print "thread", i, ":", " num:", j</p><p> conn.close()<br />if __name__ == "__main__":<br /> args = sys.argv<br /> num_of_thd = args[1]<br /> num_of_op = args[2]<br /> threads = []<br /> for i in range( 0, int(num_of_thd) ):<br /> threads.append( threading.Thread( target=db_op_thread_func,args=(i, num_of_op ) ) )</p><p> for t in threads:<br /> t.start()</p><p> for t in threads:<br /> t.join()
注意:
1,為防止主線程先於其它線程退出造成程式異常,需要調用 join() 函數,等待進程結束;
2,print語句的作用是為了瞭解程式運行情況,即時關注程式是否卡在了什麼地方;
3,python程式獲得命令列參數;
改進:
1,如果想類比不同的操作,可以將若干sql語句寫到一個字串數組中,隨機擷取,放到線程中執行;