多线程处理mysql数据

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

__author__ = 'yao'
import mydb
from time import ctime,sleep

def 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 MySQLdb
import time

class 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__()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值