簡體   English   中英

python 中的多處理與內核數量

[英]Multiprocessing in python vs number of cores

如果運行 python 腳本,我聲明 6 個使用多處理的進程,但我只有 4 個 CPU 內核,那么可以找到專用 CPU 內核的額外 2 個進程會發生什么情況。

  1. 他們是如何被處決的?
  2. 如果這兩個額外的進程在現有核心上作為單獨的線程運行,GIL 不會停止它們的執行嗎?

#編輯 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.

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