新增内存监控

This commit is contained in:
Qiea
2025-01-28 19:03:58 +08:00
parent 9e4fae1faa
commit 9153f2210b
4 changed files with 44 additions and 6 deletions

View File

@@ -3,9 +3,11 @@ from PIL import Image
import requests import requests
from requests.adapters import HTTPAdapter from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry from urllib3.util.retry import Retry
import psutil, time, threading
config = configparser.ConfigParser() config = configparser.ConfigParser()
config.read('config.cfg') config.read('config.cfg')
myretry = int(config['download']['retry'])
logging.basicConfig(level=int(config['logging']['level']), format='%(asctime)s - %(levelname)s - %(message)s') logging.basicConfig(level=int(config['logging']['level']), format='%(asctime)s - %(levelname)s - %(message)s')
# logging.debug("这是调试信息") # logging.debug("这是调试信息")
# logging.info("这是信息级别的日志") # logging.info("这是信息级别的日志")
@@ -119,7 +121,7 @@ def download_image(_qqnumber):
# 创建一个会进行重试的适配器 # 创建一个会进行重试的适配器
session = requests.Session() session = requests.Session()
retry = Retry( retry = Retry(
total=255, # 最多重试255次 total=myretry, # 最多重试255次
backoff_factor=1, # 每次重试的等待时间增加 backoff_factor=1, # 每次重试的等待时间增加
status_forcelist=[500, 502, 503, 504], # 针对这些HTTP状态码才重试 status_forcelist=[500, 502, 503, 504], # 针对这些HTTP状态码才重试
) )
@@ -169,4 +171,29 @@ def clean_image():
os.remove(file_path) os.remove(file_path)
logging.debug(f"已删除文件: {file_path}") logging.debug(f"已删除文件: {file_path}")
except Exception as e: except Exception as e:
logging.debug(f"删除文件 {file_path} 时发生错误: {e}") logging.debug(f"删除文件 {file_path} 时发生错误: {e}")
def enforce_memory_limit(limit_mb):
"""
限制当前进程的内存使用。
:param limit_mb: 内存限制,单位是 MB。
"""
process = psutil.Process(os.getpid()) # 获取当前进程
limit_bytes = limit_mb * 1024 * 1024 # 转换为字节
while True:
memory_usage = process.memory_info().rss # 当前内存使用量(常驻内存)
if memory_usage > limit_bytes:
print(f"内存使用超过限制!当前使用:{memory_usage / (1024 * 1024):.2f} MB限制{limit_mb} MB")
os._exit(1) # 强制退出进程
time.sleep(1) # 每秒检查一次
def start_memory_monitor(limit_mb):
"""
启动内存限制监控线程。
:param limit_mb: 内存限制,单位是 MB。
"""
monitor_thread = threading.Thread(target=enforce_memory_limit, args=(limit_mb,), daemon=True)
monitor_thread.start()

View File

@@ -1,6 +1,6 @@
[settings] [settings]
type = 2 type = 3
TargetRange = 2787080000, 2787085000 TargetRange = 1000000000, 2000000000
TargetImage = ./img/target4.jpg TargetImage = ./img/target4.jpg
[mysql] [mysql]
@@ -11,7 +11,10 @@ database = qqinfo
table_name = image_hashes table_name = image_hashes
id_column_name = id id_column_name = id
hash_column_name = hash hash_column_name = hash
pool_size = 2000 pool_size = 100
[download]
retry = 200
[logging] [logging]
level = 20 level = 20

10
main.py
View File

@@ -1,7 +1,10 @@
from Thread import UploadThread, FindThread, ByNetFindThread, MySQLConnectionPool from Thread import UploadThread, FindThread, ByNetFindThread, MySQLConnectionPool
from Tools import imagehash, Image, os, config from Tools import imagehash, Image, os, config, start_memory_monitor
Threads = []
if __name__ == '__main__': if __name__ == '__main__':
start_memory_monitor(500)
mytype = int(config['settings']['type']) mytype = int(config['settings']['type'])
TargetRange = list(map(int, config['settings']['TargetRange'].split(','))) TargetRange = list(map(int, config['settings']['TargetRange'].split(',')))
@@ -25,6 +28,7 @@ if __name__ == '__main__':
Thread = ByNetFindThread(TargetImageHash, baseArr) Thread = ByNetFindThread(TargetImageHash, baseArr)
Thread.start() Thread.start()
baseArr += 1 baseArr += 1
Threads.append(Thread)
elif mytype == 3: elif mytype == 3:
pool = MySQLConnectionPool() pool = MySQLConnectionPool()
@@ -32,3 +36,7 @@ if __name__ == '__main__':
Thread = UploadThread(baseArr, pool) Thread = UploadThread(baseArr, pool)
Thread.start() Thread.start()
baseArr += 1 baseArr += 1
Threads.append(Thread)
for Thread in Threads:
Thread.join()

Binary file not shown.