实现单例任务,可推送新任务功能,垃圾回收功能。

This commit is contained in:
2025-04-27 00:46:21 +08:00
parent 8aa87900bf
commit 484c20a5ef
4 changed files with 92 additions and 46 deletions

41
SingletonThreadPool.py Normal file
View File

@@ -0,0 +1,41 @@
import _thread
import time
import gc
class SingletonThreadPool:
_instance = None
def __new__(cls):
if not cls._instance:
pool_size = 2
cls._instance = super().__new__(cls)
cls._instance.pool_size = pool_size
cls._instance.task_queue = []
cls._instance.pool_lock = _thread.allocate_lock()
# 创建线程池
for _ in range(pool_size):
_thread.start_new_thread(cls._instance.worker, ())
return cls._instance
def worker(self):
while True:
self.pool_lock.acquire()
if self.task_queue:
task, args = self.task_queue.pop(0)
self.pool_lock.release()
try:
task(*args)
gc.collect()
except Exception as e:
print(f"Task execution error: {e}")
else:
self.pool_lock.release()
time.sleep(0.1)
def add_task(self, task, *args):
self.pool_lock.acquire()
self.task_queue.append((task, args))
self.pool_lock.release()