修改BUG:http请求过多导致服务器防火墙拒绝连接
This commit is contained in:
57
Thread.py
57
Thread.py
@@ -1,6 +1,11 @@
|
|||||||
import pymysql, threading, time
|
import pymysql, threading, time
|
||||||
from queue import Queue
|
from queue import Queue
|
||||||
from Tools import config, download_image, Hash, remove_image, compare, Image, imagehash, os, logging, clean_image
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
from concurrent.futures import ThreadPoolExecutor
|
||||||
|
from Tools import config, Hash, Image, imagehash, os, logging, download_image, remove_image, clean_image, compare
|
||||||
|
|
||||||
|
|
||||||
class MySQLConnectionPool:
|
class MySQLConnectionPool:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -56,11 +61,14 @@ class UploadThread(threading.Thread):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
logging.debug(f'我是上传线程{self.uploadqqnumber}')
|
logging.debug(f'我是上传线程{self.uploadqqnumber}')
|
||||||
if download_image(self.uploadqqnumber):
|
with ThreadPoolExecutor() as executor:
|
||||||
Hash(self.conn).tomysql(self.uploadqqnumber)
|
future = executor.submit(download_image, f'{self.uploadqqnumber}')
|
||||||
logging.info(f'上传成功: {self.uploadqqnumber}')
|
res = future.result() # 等待结果并获取返回值
|
||||||
remove_image(self.uploadqqnumber)
|
if res:
|
||||||
self.pool.release_connection(self.conn)
|
Hash(self.conn).tomysql(self.uploadqqnumber)
|
||||||
|
logging.info(f'上传成功: {self.uploadqqnumber}')
|
||||||
|
remove_image(self.uploadqqnumber)
|
||||||
|
self.pool.release_connection(self.conn)
|
||||||
|
|
||||||
|
|
||||||
class FindThread(threading.Thread):
|
class FindThread(threading.Thread):
|
||||||
@@ -78,7 +86,6 @@ class FindThread(threading.Thread):
|
|||||||
self.pool.release_connection(self.conn)
|
self.pool.release_connection(self.conn)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ByNetFindThread(threading.Thread):
|
class ByNetFindThread(threading.Thread):
|
||||||
def __init__(self, TargetImageHash, findqqnumber):
|
def __init__(self, TargetImageHash, findqqnumber):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
@@ -86,19 +93,23 @@ class ByNetFindThread(threading.Thread):
|
|||||||
self.findqqnumber = findqqnumber
|
self.findqqnumber = findqqnumber
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
logging.debug(f'查找的QQ号是: {self.findqqnumber}')
|
|
||||||
if download_image(self.findqqnumber):
|
with ThreadPoolExecutor() as executor:
|
||||||
FindImage = Image.open(str(f'./img/{self.findqqnumber}.jpg'))
|
future = executor.submit(download_image, f'{self.findqqnumber}')
|
||||||
if FindImage.mode == 'P' and 'transparency' in FindImage.info:
|
res = future.result() # 等待结果并获取返回值
|
||||||
FindImage = FindImage.convert('RGBA')
|
logging.debug(f'查找的QQ号是: {self.findqqnumber}, res: {res}')
|
||||||
FindImageHash = bytes.fromhex(str(imagehash.average_hash(FindImage)))
|
if res:
|
||||||
res = compare(self.TargetImageHash, FindImageHash)
|
FindImage = Image.open(str(f'./img/{self.findqqnumber}.jpg'))
|
||||||
if res-99.9 >= 0 :
|
if FindImage.mode == 'P' and 'transparency' in FindImage.info:
|
||||||
logging.info(f'找到QQ号了:{self.findqqnumber}')
|
FindImage = FindImage.convert('RGBA')
|
||||||
if os.path.exists(f'./img/congratulations_{self.findqqnumber}.jpg'):
|
FindImageHash = bytes.fromhex(str(imagehash.average_hash(FindImage)))
|
||||||
os.remove(f'./img/congratulations_{self.findqqnumber}.jpg')
|
res = compare(self.TargetImageHash, FindImageHash)
|
||||||
os.rename(f'./img/{self.findqqnumber}.jpg',f'./img/congratulations_{self.findqqnumber}.jpg')
|
if res-99.9 >= 0 :
|
||||||
clean_image()
|
logging.info(f'找到QQ号了:{self.findqqnumber}')
|
||||||
os._exit(0)
|
if os.path.exists(f'./img/congratulations_{self.findqqnumber}.jpg'):
|
||||||
logging.info(f'[{self.findqqnumber}]的相似度是:{res}%')
|
os.remove(f'./img/congratulations_{self.findqqnumber}.jpg')
|
||||||
remove_image(self.findqqnumber)
|
os.rename(f'./img/{self.findqqnumber}.jpg',f'./img/congratulations_{self.findqqnumber}.jpg')
|
||||||
|
clean_image()
|
||||||
|
os._exit(0)
|
||||||
|
logging.info(f'[{self.findqqnumber}]的相似度是:{res}%')
|
||||||
|
remove_image(self.findqqnumber)
|
||||||
|
|||||||
21
Tools.py
21
Tools.py
@@ -1,5 +1,8 @@
|
|||||||
import imagehash, configparser, requests, os, logging, re
|
import imagehash, configparser, os, logging, re
|
||||||
from PIL import Image
|
from PIL import Image
|
||||||
|
import requests
|
||||||
|
from requests.adapters import HTTPAdapter
|
||||||
|
from urllib3.util.retry import Retry
|
||||||
|
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read('config.cfg')
|
config.read('config.cfg')
|
||||||
@@ -105,6 +108,7 @@ def download_image(_qqnumber):
|
|||||||
:param _qqnumber: QQ号
|
:param _qqnumber: QQ号
|
||||||
:return: 成功:1 失败:0
|
:return: 成功:1 失败:0
|
||||||
"""
|
"""
|
||||||
|
logging.debug(f'下载的QQ号是: {_qqnumber}')
|
||||||
if not os.path.exists('img'):
|
if not os.path.exists('img'):
|
||||||
os.makedirs('img')
|
os.makedirs('img')
|
||||||
|
|
||||||
@@ -112,8 +116,19 @@ def download_image(_qqnumber):
|
|||||||
image_url = f'https://q1.qlogo.cn/g?b=qq&nk={_qqnumber}&s=0'
|
image_url = f'https://q1.qlogo.cn/g?b=qq&nk={_qqnumber}&s=0'
|
||||||
image_name = os.path.join('img', f'{_qqnumber}.jpg')
|
image_name = os.path.join('img', f'{_qqnumber}.jpg')
|
||||||
|
|
||||||
# 发送请求获取图片
|
# 创建一个会进行重试的适配器
|
||||||
response = requests.get(image_url)
|
session = requests.Session()
|
||||||
|
retry = Retry(
|
||||||
|
total=5, # 最多重试3次
|
||||||
|
backoff_factor=1, # 每次重试的等待时间增加
|
||||||
|
status_forcelist=[500, 502, 503, 504], # 针对这些HTTP状态码才重试
|
||||||
|
)
|
||||||
|
adapter = HTTPAdapter(max_retries=retry)
|
||||||
|
session.mount('https://', adapter)
|
||||||
|
session.mount('http://', adapter)
|
||||||
|
|
||||||
|
# 使用session发送请求
|
||||||
|
response = session.get(image_url, timeout=10) # 设置超时时间为10秒
|
||||||
|
|
||||||
if response.status_code == 200:
|
if response.status_code == 200:
|
||||||
# 保存图片
|
# 保存图片
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[settings]
|
[settings]
|
||||||
type = 2
|
type = 2
|
||||||
TargetRange = 2787080000, 2787083000
|
TargetRange = 2787080000, 2787085000
|
||||||
TargetImage = ./img/target4.jpg
|
TargetImage = ./img/target4.jpg
|
||||||
|
|
||||||
[mysql]
|
[mysql]
|
||||||
@@ -14,7 +14,7 @@ hash_column_name = hash
|
|||||||
pool_size = 100
|
pool_size = 100
|
||||||
|
|
||||||
[logging]
|
[logging]
|
||||||
level = 10
|
level = 20
|
||||||
|
|
||||||
;CRITICAL = 50
|
;CRITICAL = 50
|
||||||
;FATAL = CRITICAL
|
;FATAL = CRITICAL
|
||||||
|
|||||||
5
main.py
5
main.py
@@ -17,16 +17,12 @@ if __name__ == '__main__':
|
|||||||
pool = MySQLConnectionPool()
|
pool = MySQLConnectionPool()
|
||||||
Thread = FindThread(TargetImageHash, pool)
|
Thread = FindThread(TargetImageHash, pool)
|
||||||
Thread.start()
|
Thread.start()
|
||||||
os._exit(0)
|
|
||||||
|
|
||||||
elif type == 2:
|
elif type == 2:
|
||||||
while baseArr <= TargetRange[1]:
|
while baseArr <= TargetRange[1]:
|
||||||
Thread = ByNetFindThread(TargetImageHash, baseArr)
|
Thread = ByNetFindThread(TargetImageHash, baseArr)
|
||||||
Thread.start()
|
Thread.start()
|
||||||
baseArr += 1
|
baseArr += 1
|
||||||
sleep(1)
|
|
||||||
os._exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
elif type == 3:
|
elif type == 3:
|
||||||
pool = MySQLConnectionPool()
|
pool = MySQLConnectionPool()
|
||||||
@@ -34,4 +30,3 @@ if __name__ == '__main__':
|
|||||||
Thread = UploadThread(baseArr, pool)
|
Thread = UploadThread(baseArr, pool)
|
||||||
Thread.start()
|
Thread.start()
|
||||||
baseArr += 1
|
baseArr += 1
|
||||||
os._exit(0)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user