闲来无事研究了下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__()