更新時間:2023-03-06 來源:黑馬程序員 瀏覽量:
當我們遇到創(chuàng)建的子進程不多的時候,通常就可以直接使用Process類來進行創(chuàng)建,然而若是需要成百上千個的時候,那么手動去創(chuàng)建同時管理大量的子進程無疑就顯得十分的煩瑣了,而且進程的創(chuàng)建與銷毀的代碼也很大,此時我們可以使用進程池。
Pool類可以提供指定數(shù)量的進程供用戶調用,當提交新的請求到Pool中時,如果進程池還沒有滿,那么就會創(chuàng)建一個新的進程來執(zhí)行請求。當進程池滿了的時候,則請求就會先行等待,直到進程池中有進程結束,才會創(chuàng)建新的進程來執(zhí)行這些請求。
下面是一個使用 Python 進程池的簡單示例,其中使用 multiprocessing 模塊來創(chuàng)建進程池:
import multiprocessing def process_task(num): print(f"Processing task {num} in process {multiprocessing.current_process().name}") if __name__ == '__main__': # 創(chuàng)建進程池,其中 processes 參數(shù)指定了池中的進程數(shù)量 pool = multiprocessing.Pool(processes=4) # 提交任務到進程池中,其中任務的參數(shù)是從 0 到 9 的整數(shù) results = [pool.apply_async(process_task, args=(i,)) for i in range(10)] # 等待所有任務完成 pool.close() pool.join() # 獲取任務的結果 for result in results: print(result.get())
在這個例子中,我們創(chuàng)建了一個進程池,其中包含 4 個進程。然后,我們使用 pool.apply_async() 方法將 10 個任務提交到進程池中進行處理。每個任務是 process_task() 函數(shù)的調用,函數(shù)接受一個整數(shù)參數(shù)并打印出這個參數(shù)的值以及當前執(zhí)行任務的進程的名稱。在提交所有任務之后,我們調用 pool.close() 方法來關閉進程池,然后調用 pool.join() 方法來等待所有任務完成。最后,我們使用 result.get() 方法來獲取每個任務的結果并打印出來。