写一个简单的线程池,附带备注
时间: 2023-10-26 08:06:57 浏览: 34
好的,以下是一个简单的线程池的实现,附有代码注释:
```python
import threading
import queue
class ThreadPool:
def __init__(self, num_threads):
self.num_threads = num_threads
self.task_queue = queue.Queue()
self.threads = []
def start(self):
# 创建指定个数的线程,并将它们添加到线程池中
for i in range(self.num_threads):
thread = threading.Thread(target=self.run)
self.threads.append(thread)
thread.start()
def run(self):
while True:
# 获取任务队列中的一个任务,并执行
task_func, task_args = self.task_queue.get()
task_func(*task_args)
self.task_queue.task_done()
def add_task(self, task_func, *args):
# 将任务添加到任务队列中
self.task_queue.put((task_func, args))
def wait_completion(self):
# 等待所有任务完成后再返回
self.task_queue.join()
# 例子:使用线程池计算1到10的平方和
def square(num):
print(threading.current_thread().name, ": ", num**2)
if __name__ == '__main__':
pool = ThreadPool(5)
pool.start()
for i in range(1, 11):
pool.add_task(square, i)
pool.wait_completion()
```
上面的代码实现了一个简单的线程池,可以将需要执行的任务添加到任务队列中,线程池中的线程会不断从任务队列中获取任务并执行,直到所有任务都执行完毕。