[英]Multiprocessing in python vs number of cores
如果運行 python 腳本,我聲明 6 個使用多處理的進程,但我只有 4 個 CPU 內核,那么可以找到專用 CPU 內核的額外 2 個進程會發生什么情況。
#編輯 2021 年 1 月 1 日至 21 日
我在我問的問題中混淆了線程和進程。 由於我對這個概念有更好的理解,我將問題 2 改寫如下(供將來參考):
如果這兩個附加進程與現有核心中的其他兩個進程並行運行,GIL 不會停止它們的執行嗎?
Ans: GIL 不影響進程,GIL 一次只允許一個線程運行,但是對進程沒有限制。 系統調度程序管理額外的兩個進程如何在現有內核上運行。
首先,您混淆了線程和進程:在 Python 中,只有線程而不是進程必須共享其解釋器的鎖。 如果您正在使用多處理庫,那么您正在使用具有自己的解釋器的 Python 進程。
當您使用 Python 進程時,它們的執行由您的操作系統調度程序管理,其方式與您計算機中的所有其他進程相同。 如果您的進程多於 CPU 內核,則額外的進程正在后台等待調度。 這通常發生在其他進程終止、在 IO 上等待或周期性地出現時鍾中斷時。
確保您使用
pool = multiprocessing.Semaphore(multiprocessing.cpu_count() - 1)
#this will detect the number of cores in your system and creates a semaphore with that value.
當您創建一個進程時,它需要開銷來管理它、它的 memory 空間和它的共享 memory。 此外,操作系統必須運行,所以讓內核空閑總是有禮貌的,並且可以加快問題的執行速度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.