#
# Copy stuff from default context
#
globals().update((name, getattr(context._default_context, name))
for name in context._default_context.__all__)
__all__ = context._default_context.__all__
所以它从context._default_context中拉出{}。在
如果您在context.py中查找,可以找到Process类:
^{pr2}$
其中还引用和定义了更具体的实现:
class ForkProcess(process.BaseProcess):
_start_method = 'fork'
@staticmethod
def _Popen(process_obj):
from .popen_fork import Popen
return Popen(process_obj)
class SpawnProcess(process.BaseProcess):
_start_method = 'spawn'
@staticmethod
def _Popen(process_obj):
from .popen_spawn_posix import Popen
return Popen(process_obj)
class ForkServerProcess(process.BaseProcess):
_start_method = 'forkserver'
@staticmethod
def _Popen(process_obj):
from .popen_forkserver import Popen
return Popen(process_obj)
class ForkContext(BaseContext):
_name = 'fork'
Process = ForkProcess
class SpawnContext(BaseContext):
_name = 'spawn'
Process = SpawnProcess
class ForkServerContext(BaseContext):
_name = 'forkserver'
Process = ForkServerProcess
def _check_available(self):
from . import reduction
if not reduction.HAVE_SEND_HANDLE:
raise ValueError('forkserver start method not available')
_concrete_contexts = {
'fork': ForkContext(),
'spawn': SpawnContext(),
'forkserver': ForkServerContext(),
}
_default_context = DefaultContext(_concrete_contexts['fork'])
稍后将设置默认上下文的__all__:
DefaultContext.__all__ = list(x for x in dir(DefaultContext) if x[0] != '_')
它仍然存在,只是以一种非常不同的方式定义:
multiprocessing/__init__.py
现在将属性添加到顶级包中,如下所示:所以它从}。在
context._default_context
中拉出{如果您在
^{pr2}$context.py
中查找,可以找到Process
类:其中还引用和定义了更具体的实现:
稍后将设置默认上下文的
__all__
:代码布局的更改是为了支持contexts。对于大多数人来说,这种变化应该是透明的,但是任何从顶级包(例如
from multiprocessing.queues import Queue
或from multiprocessing.process import Process
)外部导入类的人都会看到这些类被破坏。在如果您使用的是Eclipse和PyDev,则需要将“multiprocessing”作为python解释器的强制内置。在
相关问题 更多 >
编程相关推荐