python進程獲取
Ⅰ python線程池(ThreadPoolExecutor)與進程池(ProcessPoolExecutor)的簡單用法
Python中ThreadPoolExecutor與ProcessPoolExecutor的簡單用法如下:
ThreadPoolExecutor: 導入模塊:首先需要從concurrent.futures模塊中導入ThreadPoolExecutor。 創建線程池:使用ThreadPoolExecutor創建一個線程池,其中n是線程池中線程的數量。 提交任務:通過submit方法提交任務到線程池,該方法返回一個Future對象,用於跟蹤任務的狀態和結果。 等待任務完成:可以使用wait方法等待任務完成,其中fs是Future對象的集合,timeout是等待的超時時間,return_when指定返回條件。 獲取結果:使用map方法按順序返回任務執行結果,或者通過as_completed方法返回已完成的任務,返回順序與任務執行結束的順序一致。
ProcessPoolExecutor: 導入模塊:從concurrent.futures模塊中導入ProcessPoolExecutor。 創建進程池:使用ProcessPoolExecutor創建一個進程池,其中n是進程池中進程的數量,通常可以設置為CPU的核心數。 提交任務:與ThreadPoolExecutor類似,通過submit方法提交任務到進程池,並返回一個Future對象。 等待任務完成:使用wait方法等待任務完成,參數與ThreadPoolExecutor中的wait方法相同。 獲取結果:ProcessPoolExecutor也提供了map和as_completed方法用於獲取任務的結果。特別地,map方法還接受一個chunksize參數,用於分割大型迭代對象,以提高性能。
重點注意事項: 選擇使用場景:對於IO密集型任務,ThreadPoolExecutor通常更高效;而對於計算密集型任務,ProcessPoolExecutor由於可以充分利用多核CPU,因此具有更高的執行效率。 GIL:Python的GIL限制了同一時間只有一個線程可以執行Python位元組碼,這影響了多線程在CPU密集型任務中的性能。 資源管理:使用線程池和進程池時,需要注意合理設置工作線程/進程的數量,以避免資源過度佔用或浪費。
Ⅱ Python3多進程運行返回值怎麼獲得
frommultiprocessingimportPool
importtime
defwork(n):
print('開工啦...')
time.sleep(3)
returnn**2
if__name__=='__main__':
q=Pool()
#非同步apply_async用法:如果使用非同步提交的任務,主進程需要使用jion,等待進程池內任務都處理完,然後可以用get收集結果,否則,主進程結束,進程池可能還沒來得及執行,也就跟著一起結束了
res=q.apply_async(work,args=(2,))
q.close()
q.join()#join在close之後調用
print(res.get())
#同步apply用法:主進程一直等apply提交的任務結束後才繼續執行後續代碼
#res=q.apply(work,args=(2,))
#print(res)