线程池实例
时间: 2023-06-29 08:11:01 浏览: 49
下面是一个简单的线程池实例,包含一个Worker类和一个ThreadPool类。
```python
import threading
import queue
class Worker(threading.Thread):
"""工作线程"""
def __init__(self, task_queue):
super().__init__()
self.task_queue = task_queue
self.daemon = True
self.start()
def run(self):
while True:
func, args, kwargs = self.task_queue.get()
try:
func(*args, **kwargs)
except Exception as e:
print(e)
finally:
# 任务执行完毕后,向任务队列发送一个信号
self.task_queue.task_done()
class ThreadPool():
"""线程池"""
def __init__(self, num_threads):
self.task_queue = queue.Queue()
for i in range(num_threads):
Worker(self.task_queue)
def add_task(self, func, *args, **kwargs):
"""添加一个任务"""
self.task_queue.put((func, args, kwargs))
def wait_completion(self):
"""等待所有任务执行完毕"""
self.task_queue.join()
```
使用方法:
```python
def do_something(data):
# some code here
pass
if __name__ == '__main__':
pool = ThreadPool(4)
for data in data_list:
pool.add_task(do_something, data)
pool.wait_completion()
```
其中,`do_something` 是需要执行的函数,`data_list` 是需要处理的数据列表,我们可以通过 `add_task` 方法将函数和数据添加到任务队列中,最后调用 `wait_completion` 方法等待所有任务执行完毕。