python模拟并发是多线程_Python模拟线程并发 | 学步园

最近做python,下面是一段测试数据库性能的代码。

数据库表记录:1000000条。

开200个线程,100个同时并发。

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sys

import os

import os.path

import re

import MySQLdb

import httplib, mimetypes

import traceback

import logging

import ConfigParser

import time

import threading

import string

import codecs

import random

import datetime

class SelectView(threading.Thread):

def __init__(self, threadName):

threading.Thread.__init__(self, name = threadName)

def run(self):

#global dbConn

#dbConn = MySQLdb.connect(host=dbhost, port=dbport, user=dbuser, passwd=dbpass, db=dbschema, use_unicode=True, charset='utf8')

for i in range(100):

start =time.time()

print self.getName(),"-->Thread start!"+getDbDateString()

logger.info(self.getName()+"-->Thread start!"+getDbDateString())

try:

dbConn = None

dbConn = MySQLdb.connect(host=dbhost, port=dbport, user=dbuser, passwd=dbpass, db=dbschema, use_unicode=True, charset='utf8')

strss = string.join(random.sample(['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','T','Z'], 1)).replace(" ","")

#print "query str----"+strss

sql = "SELECT * FROM smartone_metainfo_view as s where songName like '%"+strss+"%' limit 200"

cursor = dbConn.cursor()

cursor.execute(sql)

songid =""

for counts in cursor.fetchall():

songid= songid + str(counts[0])+str(counts[1])+str(counts[2])+str(counts[3])+str(counts[4])+str(counts[5])+str(counts[6])+str(counts[7])+str(counts[8])+str(counts[9])+str(counts[10])+str(counts[11])+str(counts[12])+str(counts[13])+str(counts[14])+str(counts[15])+ str(counts[16])+str(counts[17])+str(counts[18])+str(counts[19])+str(counts[20])+str(counts[21])+str(counts[22])+str(counts[23])+str(counts[24])+str(counts[25])+str(counts[26])+str(counts[27])+str(counts[28])+str(counts[29])+str(counts[30])+str(counts[31])

end =time.time()

sec = end - start

print " thread,execute total time is----",sec," second"

logger.info(" thread execute finish,execute total time is----"+str(sec)+" second")

print songid

#print "size --"+str(len(counts))+"songId---"+str(counts[0])# self.getName(),"--query result:--total count--"+str(counts[0])#+"----songName:"+counts[1]+"----isrc"+str(counts[2])

#logger.info("size --"+str(len(counts))+"songId---"+str(counts[0]))

#print "command free----",os.system('free')

dbConn.close()

except:

etype, evalue = sys.exc_info()[:2]

logger.info(self.getName()+"--Thread,-query data failed!---Type: " +str(etype)+"----Value--:"+str(evalue))

print "Type: " , etype

print "Value: " , evalue

#cmd = "mysqladmin -uMELODEO_USER -p6DF0FF9674EC1A397A430F9F2FCB2C64 -h202.153.121.172 status"

#        strs = os.system(cmd)

#lines = os.popen(cmd).readlines()

#for line in lines:

#    print line.rstrip()

#logger.info("".join(lines))

#sem.release()

#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

def init_settings(profile, config_file):

#read ini file

#    config_file = "c:/contentstext/processCommonFormat.ini"

#    print os.getcwd()

cfg = ConfigParser.RawConfigParser()

cfg.read(config_file)

#define the directory we are writing out to and some other parameters.

global dbhost

dbhost = cfg.get(profile, "dbhost")

global dbport

dbport = int( cfg.get(profile, "dbport"))

global dbuser

dbuser = cfg.get(profile, "dbuser")

global dbpass

dbpass = cfg.get(profile, "dbpassword")

global dbschema

dbschema = cfg.get(profile, "db")

global USE_UNICODE

try:

use_unicode = cfg.get(profile, "USE_UNICODE")

if (use_unicode == 'Y'):

USE_UNICODE=True

else:

USE_UNICODE=False

except:

USE_UNICODE=False

#set up logs - ripped from contentManager.py

LOG_FILE = './smartone_200.log'

val  = cfg.get(profile, "loglevel")                    # The configured log level

if len(val) >0:

if val == 'debug':

log_level = logging.DEBUG

elif val == 'info':

log_level = logging.INFO

elif val == 'warning':

log_level = logging.WARNING

elif val == 'error':

log_level = logging.ERROR

elif val == 'critical':

log_level = logging.CRITICAL

else:

log_level = logging.INFO

val  = cfg.get(profile, "log_format")        # The format string for this logging session

if len(val) >0:

log_format = val

else:

log_format = '%(asctime)s %(levelname)s %(message)s'

###################

# Initialize logger

global logger

logger = logging.getLogger('sessioninfo')

hdlr = logging.FileHandler(LOG_FILE)

formatter = logging.Formatter(log_format)

hdlr.setFormatter(formatter)

logger.addHandler(hdlr)

logger.setLevel(log_level)

def getDbDateString():

now = datetime.datetime.today()

#should probably do this using a formatting string - don't feel like reading docs.

return str(now.year) + "-" + str(now.month) + "-" + str(now.day) + " " + str(now.hour) + ":" + str(now.minute) + ":" + str(now.second)

if __name__ == "__main__":

config_file = "./smartone_DataTest.ini"

profile = "smartone"

init_settings(profile, config_file)

maxThread = 200

#threading.

import socket

socket.setdefaulttimeout(15)

threadList=[]

#threading.BoundedSemaphore(maxThread)

for i in range(maxThread):

#sv = SelectView()

threads = SelectView('thread'+str(i))

threadList.append(threads)

#threadList.remove(len(threadList))

print '/nStarting threads'

for i in threadList:

i.start()

print 'All threads started/n'

for i in threadList:

i.join()

print "All thread has create,Wait for all thread exit."

#

#sv.executeThread()

#    sv = SelectView()

#    cout = sv.selectView()

#    print "wewe----",cout

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值