实现单例任务,可推送新任务功能,垃圾回收功能。
This commit is contained in:
41
SingletonThreadPool.py
Normal file
41
SingletonThreadPool.py
Normal 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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user