创造一个线程池
时间: 2023-06-28 16:11:39 浏览: 65
线程池是一种常见的并发编程模型,它可以提高程序的并发性能,减少线程创建和销毁的开销,避免系统资源过度占用等问题。下面是一个简单的线程池实现示例:
```python
import threading
from queue import Queue
class ThreadPool:
def __init__(self, max_workers):
self.max_workers = max_workers
self.worker_queue = Queue()
self.is_stopped = False
def start(self):
for i in range(self.max_workers):
t = threading.Thread(target=self.worker)
t.start()
def stop(self):
self.is_stopped = True
def submit(self, task):
self.worker_queue.put(task)
def worker(self):
while not self.is_stopped:
try:
task = self.worker_queue.get(timeout=1)
task()
except:
pass
```
在上面的代码中,我们定义了一个名为 ThreadPool 的类,它有以下方法:
- `__init__(self, max_workers)`:初始化线程池,max_workers 表示线程池中最大的工作线程数。
- `start(self)`:启动线程池,创建指定数量的工作线程。
- `stop(self)`:停止线程池,让所有工作线程结束。
- `submit(self, task)`:提交一个任务到线程池,task 是一个可调用的对象(比如函数)。
- `worker(self)`:工作线程的执行函数,从任务队列中取出任务并执行。
使用线程池的示例代码如下:
```python
pool = ThreadPool(4)
pool.start()
def task():
# 执行任务的代码
pass
for i in range(10):
pool.submit(task)
pool.stop()
```
在上面的代码中,我们创建了一个最大容量为 4 的线程池,然后提交了 10 个任务,最后停止了线程池。当每个工作线程都执行完自己的任务后,线程池才会停止。