在学习Python的multiprocessing包(用于Python 3.4)时,我注意到multiprocessing.Pool是在context.py中的类BaseContext中定义的。这个定义是
def Pool(self, processes=None, initializer=None, initargs=(),
maxtasksperchild=None):
'''Returns a process pool object'''
from .pool import Pool
return Pool(processes, initializer, initargs, maxtasksperchild,
context=self.get_context())因此,它最终调用了在multiprocessing.pool.Pool中定义的pool.py。
为什么multiprocessing包同时定义了multiprocessing.Pool和multiprocessing.pool.Pool
发布于 2015-07-28 01:04:48
context.py包含与操作系统相关的代码.Pool和许多其他值的定义是不同的,这取决于是否sys.platform == 'win32'。
pool.py模块包含与创建给定上下文的池相关的代码。
通过以这种方式组织代码,开发人员设法以一种与操作系统无关的方式编写pool.py。例如,在if sys.platform ...中没有pool.py语句。
__init__.py包含:
globals().update((name, getattr(context._default_context, name))
for name in context._default_context.__all__)
__all__ = context._default_context.__all__将值从context._default_context复制到multiprocessing包的命名空间中。multiprocessing.Pool就是这样定义的。
作为multiprocessing包的用户,您需要通过multiprocessing.Pool访问池,尽管也可以使用multiprocessing.pool.Pool。
https://stackoverflow.com/questions/31665641
复制相似问题