python自制线程池
时间: 2024-08-04 16:01:32 浏览: 56
Python 自制线程池通常是指通过`threading`模块创建一组工作线程,用于并发执行任务,提高程序的效率。下面是一个简单的例子说明如何自定义线程池:
```python
import threading
from queue import Queue
class ThreadPool:
def __init__(self, num_threads):
self.tasks = Queue()
for _ in range(num_threads):
worker = Worker(self.tasks)
worker.start()
def submit_task(self, task):
self.tasks.put(task)
def shutdown(self):
self.tasks.put(None)
while not self.tasks.empty():
pass
class Worker(threading.Thread):
def __init__(self, tasks):
super().__init__()
self.tasks = tasks
def run(self):
while True:
task = self.tasks.get()
if task is None:
break
# 执行任务
result = task.run()
# 如果有回调函数,执行结果处理
if hasattr(task, 'on_complete'):
task.on_complete(result)
self.tasks.task_done()
# 使用示例
def my_task(data):
print(f"Task {data} is running")
time.sleep(2) # 模拟耗时操作
return f"Task {data} completed"
pool = ThreadPool(5)
for i in range(10):
pool.submit_task(MyTask(i))
pool.shutdown() # 等待所有任务完成
```
在这个例子中,`ThreadPool`类负责管理线程,接收任务,并将其放入队列中。每个`Worker`线程从队列中取出任务并执行。`shutdown`方法用于通知线程池关闭,当任务队列为空时结束。
阅读全文