繁体   English   中英

在Python的多处理包中,为什么有多处理.Pool和multiprocessing.pool.Pool?

[英]In Python's multiprocessing package, why is there multiprocessing.Pool and multiprocessing.pool.Pool?

在学习Python的multiprocessing包(对于Python 3.4 )时,我注意到了multiprocessing.Pool BaseContextcontext.py中的Class 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.Poolmultiprocessing.pool.Pool

context.py包含依赖于操作系统的代码。 Pool和许多其他值的定义不同,具体取决于sys.platform == 'win32'

pool.py模块包含与给定上下文创建池相关的代码。

通过以这种方式组织代码,开发人员设法以与操作系统无关的方式编写pool.py 例如,pool.py中没有if sys.platform ...语句。


__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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM