簡體   English   中英

multiprocessing 一次運行多少個進程?

[英]multiprocessing how many processes run at one time?

我運行了我的第一個多處理代碼。 測試代碼如下所示。 在我的測試中,我只運行了兩個進程來查看它是否產生了預期的結果,它確實做到了。

我現在想“真正地”運行它。 我的電腦有 8 個內核,我想運行大約 8 個內核。 100 個進程。 我的問題是,如果我運行下面的代碼並創建 100 個進程,我是否需要指定一次運行的最大進程數,或者后台的代碼是否做了一些聰明的事情並意識到只有 8 個內核和相應地優化?

 if __name__ == '__main__':

    # set up the data
    df_data = Somefunc()   
    pickled_df = pickle.dumps(df_data)
    size = len(pickled_df)

    # create a shared memory
    shm = shared_memory.SharedMemory(create=True, size=size)
    shm.buf[:size] = pickled_df

    # Notice that we only pass the name of the block, not the block itself
    processes = [Process(target=run_func, args=(shm.name, x)) for x in range(1, 3)]
    [p.start() for p in processes]
    [p.join() for p in processes]

    shm.close()

    # Unlink should only be called once on a memory block
    shm.unlink()

如果您使用multiprocessing.Pool來管理進程,它會將工作進程的數量默認為os.cpu_count()的值,這在大多數情況下會為您提供適當的值。

同樣,如果您將concurrent.futuresProcessPoolExecutor一起使用,則默認的工作人員數量將是“機器上的處理器數量”。

如果您只是創建Process對象並自己啟動它們,則沒有這樣的默認限制。


有關“您的進程可以運行的內核數量”何時不同於“機器上的處理器數量”的討論,請參閱此答案

暫無
暫無

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

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