最近改了改代码,正好解决了一些报错问题,更新出来。个别处会加蜜
数据库以及线程控制
from DBUtils.PooledDB import PooledDB
import requests
import demjson
import time
import random
import json
import pymysql
import datetime
import threading
b = {"user": "root",
"passwd": "Lohas123",
"host": "121.40.52.101",
"db": 'price',
"port": 3306,
"charset": 'utf8'
}
#改了一下-10才能将库里读完。
h = -10
class Agoda(threading.Thread):
__pool = None
_instance_lock = threading.Lock()
def __init__(self):
threading.Thread.__init__(self)
self.indata =(datetime.datetime.now()+datetime.timedelta(days=2)).strftime('%Y-%m-%d %H:%M:%S')
self.outdata =(datetime.datetime.now()+datetime.timedelta(days=4)).strftime("%Y-%m-%d %H:%M:%S")
# 将数据库连接游标初始化
self.coon = Agoda.getmysqlconn()
self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)
# sql连接池
@staticmethod
def getmysqlconn():
if Agoda.__pool is None:
__pool = PooledDB(creator=pymysql, mincached=3, maxcached=20, host=b["host"], user=b["user"],
passwd=b["passwd"], db=b["db"], port=b["port"], charset=b["charset"])
return __pool.connection()
# 插入\更新\删除sql\
def op_insert(self, sql):
print('op_insert', sql)
self.cur.execute(sql)
print("修改成功")
self.coon.commit()
# 查询
def op_select(self, sql):
print('op_select', sql)
self.cur.execute(sql) # 执行sql
select_res = self.cur.fetchall() # 返回结果为字典
# print("查询成功")
return select_res
# 释放资源
def dispose(self):
self.coon.close()
self.cur.close()
#动态计算数据库数量
def count(self):
table="foreign_city_copy"
runstatue = "isrunning"
sql="select count(*) from {0} where {1}=0".format(table,runstatue)
ress = (list(self.op_select(sql)[0].values())[0]//10+1)*10
return ress
#线程控制稍微改了下
def run(self):
global h
count=self.count()
while True:
if h > count:
break
with Agoda._instance_lock:
h += 10
if h > count:
break
sql = "select id,name,ename,country from foreign_city_co