在多线程编程中,线程池是一种常见的资源管理方式,它能够有效地管理线程的生命周期,提高应用程序的执行效率。下面,我将通过150行代码,展示如何打造一个实用的线程池。
首先,我们需要定义一个线程池类,该类需要具备以下功能:
- 线程池的初始化,包括指定线程池的大小、任务队列等。
- 提交任务到线程池。
- 执行任务。
- 关闭线程池。
下面是具体的实现:
import threading
from queue import Queue
class ThreadPool:
def __init__(self, num_threads):
self.tasks = Queue()
self.threads = []
self.num_threads = num_threads
for _ in range(num_threads):
thread = threading.Thread(target=self.worker)
thread.start()
self.threads.append(thread)
def worker(self):
while True:
func, args, kwargs = self.tasks.get()
try:
func(*args, **kwargs)
finally:
self.tasks.task_done()
def submit(self, func, *args, **kwargs):
self.tasks.put((func, args, kwargs))
def close(self):
for thread in self.threads:
thread.join()
接下来,我们可以使用这个线程池来执行一些任务:
def print_task(num):
print(f"Task {num} is running on thread {threading.current_thread().name}")
if __name__ == "__main__":
pool = ThreadPool(4)
for i in range(10):
pool.submit(print_task, i)
pool.close()
在这个例子中,我们创建了一个包含4个线程的线程池,并提交了10个任务。每个任务都会在独立的线程中执行,从而实现并行处理。
这个线程池的实现非常简单,但已经具备了基本的线程池功能。当然,在实际应用中,我们可能需要添加更多的功能,例如:
- 线程池的动态扩展和缩减。
- 任务执行结果的收集。
- 异常处理。
- 线程池的生命周期管理。
通过以上150行代码,我们可以轻松地打造出一个实用的线程池。当然,这只是一个基础示例,实际应用中可能需要根据具体需求进行调整。
