设计一个python线程池
时间: 2023-10-24 18:26:15 浏览: 87
下面是一个简单的Python线程池实现,使用标准库中的`queue`和`threading`模块:
```python
import queue
import threading
class ThreadPool:
def __init__(self, num_threads):
self.tasks = queue.Queue()
self.workers = []
self.num_threads = num_threads
for i in range(num_threads):
worker = Worker(self.tasks)
self.workers.append(worker)
def add_task(self, func, *args, **kwargs):
self.tasks.put((func, args, kwargs))
def wait_completion(self):
self.tasks.join()
class Worker(threading.Thread):
def __init__(self, tasks):
threading.Thread.__init__(self)
self.tasks = tasks
self.daemon = True
self.start()
def run(self):
while True:
func, args, kwargs = self.tasks.get()
try:
func(*args, **kwargs)
except Exception as e:
print(e)
finally:
self.tasks.task_done()
```
使用方法:
```python
def some_function(*args, **kwargs):
# do something
pool = ThreadPool(num_threads=4)
for i in range(10):
pool.add_task(some_function, arg1, arg2, kwarg1=value1)
pool.wait_completion()
```
这个线程池的核心是`ThreadPool`类,它维护了一个线程队列和一个任务队列。在初始化时,创建了指定数量的`Worker`线程。`Worker`线程从任务队列中获取任务,并执行对应的函数。当一个任务执行完成时,`Worker`线程会通知任务队列,任务数减1。在主程序中,使用`add_task`方法向任务队列中添加任务,使用`wait_completion`方法等待所有任务执行完成。
阅读全文