实现个线程池
时间: 2023-06-28 07:05:18 浏览: 63
线程池是一种常见的多线程应用开发模型,它可以有效地控制并发线程数,提高程序的效率和稳定性。下面是一个简单的线程池实现,仅供参考。
```python
import threading
import queue
class ThreadPool:
def __init__(self, max_workers):
self.max_workers = max_workers
self.tasks = queue.Queue()
self.workers = []
self._stop = False
def start(self):
for i in range(self.max_workers):
worker = threading.Thread(target=self._worker)
worker.start()
self.workers.append(worker)
def stop(self):
self._stop = True
def submit(self, task):
self.tasks.put(task)
def _worker(self):
while not self._stop:
try:
task = self.tasks.get(timeout=1)
task()
except queue.Empty:
pass
def join(self):
for worker in self.workers:
worker.join()
```
在上面的实现中,我们使用了 Python 的标准库中的 `threading` 和 `queue` 模块。`ThreadPool` 类包括以下几个方法:
- `__init__(self, max_workers)`:初始化线程池,指定最大工作线程数。
- `start(self)`:启动线程池中的所有工作线程。
- `stop(self)`:停止线程池中的所有工作线程。
- `submit(self, task)`:向线程池中提交一个任务。
- `_worker(self)`:工作线程的主函数,不断从任务队列中获取任务并执行。
- `join(self)`:等待所有工作线程结束。
使用线程池的代码示例:
```python
def worker():
print('hello, world')
pool = ThreadPool(4)
pool.start()
for i in range(10):
pool.submit(worker)
pool.stop()
pool.join()
```
在这个示例中,我们创建了一个包含 4 个工作线程的线程池,向线程池中提交了 10 个任务,每个任务都是一次输出“hello, world”。最后,我们调用了 `stop()` 方法停止线程池中的所有工作线程,并调用了 `join()` 方法等待所有工作线程结束。