簡體   English   中英

多處理 function 執行與 python

[英]multiprocessing a function execution with python

我有一個 pandas dataframe,它由大約 1M 行組成,它包含用戶輸入的信息。 我寫了一個 function 來驗證用戶輸入的數字是否正確。 我想做的是在多個處理器上執行 function 以克服在單個處理器上進行大量計算的問題。 我所做的是將我的 dataframe 分成多個塊,每個塊包含 50K 行,然后使用 python 多處理器模塊分別對每個塊執行處理。 問題是只有第一個進程正在啟動並且它仍在使用一個處理器而不是在所有處理器上分配負載。 這是我寫的代碼:

 pool = multiprocessing.Pool(processes=16)
 r7 = pool.apply_async(validate.validate_phone_number, (has_phone_num_list[0],fields ,dictionary))
 r8 = pool.apply_async(validate.validate_phone_number, (has_phone_num_list[1],fields ,dictionary))
 print(r7.get())
 print(r8.get())
 pool.close()
 pool.join()

我附上了一張截圖,顯示了執行上述代碼時 CPU 使用情況在此處輸入圖像描述

關於如何克服這個問題的任何建議?

我建議你試試這個:

from concurrent.futures import ProcessPoolExecutor

with ProcessPoolExecutor() as executor:
    params = [(pnl, fields, dictionary) for pnl in has_phone_num_list]
    for result in executor.map(validate.validate_phone_number, params):
        pass # process results here

通過構建不帶參數的 ProcessPoolExecutor,您的大部分 CPU 將得到充分利用。 這是一種非常便攜的方法,因為沒有關於可用 CPU 數量的明確假設。 當然,您可以使用 max_workers=N 進行構造,其中 N 是一個較小的數字,以確保同時使用最少數量的 CPU。 如果您不太關心整個過程需要多長時間,您可以這樣做。

如此答案中所建議的,您可以使用 pandarallel 並行使用 Pandas 的 apply function。 不幸的是,因為我無法嘗試您的代碼,所以我無法找到問題所在。 您是否嘗試使用更少的處理器(例如 8 個而不是 16 個)?

請注意,在某些情況下,並行化不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM