[英]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.futures
與ProcessPoolExecutor
一起使用,則默認的工作人員數量將是“機器上的處理器數量”。
如果您只是創建Process
對象並自己啟動它們,則沒有這樣的默認限制。
有關“您的進程可以運行的內核數量”何時不同於“機器上的處理器數量”的討論,請參閱此答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.