多线程处理mysql数据

来源:互联网 发布:知乎怎么做微信销售 编辑:程序博客网 时间:2024/06/15 18:27

闲来无事研究了下py,发现多线程处理起数据来比PHP不要爽太多,废话少说上码

__author__ = 'yao'import mydbfrom time import ctime,sleepdef MyThread(db):    for i in xrange(10):        sql = "select * from y_user where c=0 limit 10"        db.query(sql)        result = db.fetchAllRows()        for row in result:            db.update("UPDATE y_user SET c=1 WHERE id=%s" % row[0])if __name__ == '__main__':  dbconfig = {'host':'localhost',        'port': 3306,        'user':'root',        'passwd':'123456',        'db':'niuhome',        'charset':'utf8'}  db = mydb.MySQL(dbconfig)  MyThread(db)

开10个线程同时处理,在数据量大的时候处理效率比单纯在web端走php快很多,当然也可以玩php-cli。。。纯属本人闲着没事捣鼓,大牛就别看了

附上找来的db封装类

import MySQLdbimport timeclass MySQL:  error_code = None  _instance = None  _conn = None  _cur = None  _TIMEOUT = 30  _timecount = 0  def __init__(self, dbconfig):    try:      self._conn = MySQLdb.connect(host=dbconfig['host'],                     port=dbconfig['port'],                     user=dbconfig['user'],                     passwd=dbconfig['passwd'],                     db=dbconfig['db'],                     charset=dbconfig['charset'])    except MySQLdb.Error, e:      self.error_code = e.args[0]      error_msg = 'MySQL error! ', e.args[0], e.args[1]      print error_msg      if self._timecount < self._TIMEOUT:        interval = 5        self._timecount += interval        time.sleep(interval)        return self.__init__(dbconfig)      else:        raise Exception(error_msg)    self._cur = self._conn.cursor()    self._instance = MySQLdb  def query(self,sql):    try:      self._cur.execute("SET NAMES utf8")      result = self._cur.execute(sql)    except MySQLdb.Error, e:      self.error_code = e.args[0]      result = False    return result  def update(self,sql):    try:      self._cur.execute("SET NAMES utf8")      result = self._cur.execute(sql)      self._conn.commit()    except MySQLdb.Error, e:      self.error_code = e.args[0]      result = False    return result  def insert(self,sql):    try:      self._cur.execute("SET NAMES utf8")      self._cur.execute(sql)      self._conn.commit()      return self._conn.insert_id()    except MySQLdb.Error, e:      self.error_code = e.args[0]      return False  def fetchAllRows(self):    return self._cur.fetchall()  def fetchOneRow(self):    return self._cur.fetchone()  def getRowCount(self):    return self._cur.rowcount  def commit(self):    self._conn.commit()  def rollback(self):    self._conn.rollback()  def __del__(self):    try:      self._cur.close()      self._conn.close()    except:      pass  def  close(self):    self.__del__()


0 0