使用Multiprocessing包中的Process和Pool模块,并继续使用_bootstrap
方法的引用。
从我看到该方法导入multiprocessing
util.py
模块并使用它的方法(与其他一些方法合并)到trace
,{{ 1}}和log
子进程。
manage
研究了术语" bootstrap"稍微看看它在Python模块中的各种上下文中使用,并且最重要的是(除了可能是twitter bootstrap框架之外),参考统计中测量准确性的过程。
但在这种情况下,似乎函数名称可能指的是将各种元素联系在一起的方法?是这样的吗?
答案 0 :(得分:6)
_bootstrap
函数是在multiprocessing.Process
创建之后立即运行的函数。 after it's forked:
def _launch(self, process_obj):
code = 1
parent_r, child_w = os.pipe()
self.pid = os.fork()
if self.pid == 0:
try:
os.close(parent_r)
if 'random' in sys.modules:
import random
random.seed()
code = process_obj._bootstrap()
finally:
os._exit(code)
else:
os.close(child_w)
util.Finalize(self, os.close, (parent_r,))
self.sentinel = parent_r
def _main(fd):
with os.fdopen(fd, 'rb', closefd=True) as from_parent:
process.current_process()._inheriting = True
try:
preparation_data = pickle.load(from_parent)
prepare(preparation_data)
self = pickle.load(from_parent)
finally:
del process.current_process()._inheriting
return self._bootstrap()
传递给target
的{{1}}是从Process
执行的:
_bootstrap
所以" bootstrap"在这方面是参考bootstrapping (or more commonly these days, booting) a computer。就像在启动时完成的第一件事一样,它负责实际启动您真正感兴趣的软件。对于 try:
self.run() # This runs target.
exitcode = 0
finally:
util._exit_function()
,multiprocessing
负责进行设置需要运行_bootstrap
功能,然后清理。