更新时间:2023-03-06 来源:黑马程序员 浏览量:
当我们遇到创建的子进程不多的时候,通常就可以直接使用Process类来进行创建,然而若是需要成百上千个的时候,那么手动去创建同时管理大量的子进程无疑就显得十分的烦琐了,而且进程的创建与销毁的代码也很大,此时我们可以使用进程池。
Pool类可以提供指定数量的进程供用户调用,当提交新的请求到Pool中时,如果进程池还没有满,那么就会创建一个新的进程来执行请求。当进程池满了的时候,则请求就会先行等待,直到进程池中有进程结束,才会创建新的进程来执行这些请求。
下面是一个使用 Python 进程池的简单示例,其中使用 multiprocessing 模块来创建进程池:
import multiprocessing def process_task(num): print(f"Processing task {num} in process {multiprocessing.current_process().name}") if __name__ == '__main__': # 创建进程池,其中 processes 参数指定了池中的进程数量 pool = multiprocessing.Pool(processes=4) # 提交任务到进程池中,其中任务的参数是从 0 到 9 的整数 results = [pool.apply_async(process_task, args=(i,)) for i in range(10)] # 等待所有任务完成 pool.close() pool.join() # 获取任务的结果 for result in results: print(result.get())
在这个例子中,我们创建了一个进程池,其中包含 4 个进程。然后,我们使用 pool.apply_async() 方法将 10 个任务提交到进程池中进行处理。每个任务是 process_task() 函数的调用,函数接受一个整数参数并打印出这个参数的值以及当前执行任务的进程的名称。在提交所有任务之后,我们调用 pool.close() 方法来关闭进程池,然后调用 pool.join() 方法来等待所有任务完成。最后,我们使用 result.get() 方法来获取每个任务的结果并打印出来。