簡體   English   中英

multiprocessing.cpu_count和os.cpu_count之間的區別

[英]Difference between multiprocessing.cpu_count and os.cpu_count

osmultiprocessing模塊都定義了一個cpu_count函數。

os.cpu_count記錄如下:

返回系統中的CPU數量。 如果不確定,則返回None。

multiprocessing.cpu_count的文檔說:

返回系統中的CPU數量。 可能會引發NotImplementedError。 另請參見os.cpu_count()

在我的機器上,它們都返回相同的結果:

>>> import os
>>> import multiprocessing as mp
>>> os.cpu_count()
8
>>> mp.cpu_count()
8

我本以為multiprocessing.cpu_count只是對os.cpu_count引用,但事實並非如此:

>>> os.cpu_count is mp.cpu_count
False

那么它們之間有什么區別呢? 我是否保證他們將始終返回相同的結果? 此外,如果我想指定要為multiprocessing.Pool創建的多個進程,是否應該使用osmultiprocessing的功能?

答案在於multiprocessing.context ,它對BaseContext.cpu_count定義如下:

# cpython/Lib/multiprocessing/context.py

class BaseContext(object):
    def cpu_count(self):
        '''Returns the number of CPUs in the system'''
        num = os.cpu_count()
        if num is None:
            raise NotImplementedError('cannot determine number of cpus')
        else:
            return num

然后,通過multiprocessing公開此cpu_count方法:

# cpython/Lib/multiprocessing/__init__.py

__all__ = [x for x in dir(context._default_context) if not x.startswith('_')]
globals().update((name, getattr(context._default_context, name)) for name in __all__)

因此,最后, multiprocessing.cpu_count只是os.cpu_count的包裝。

暫無
暫無

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

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