Python Multiprocessing.Process模块​​中的引导术语是指什么?

时间:2014-08-27 02:58:32

标签: python multiprocessing python-internals

使用Multiprocessing包中的Process和Pool模块,并继续使用_bootstrap方法的引用。

从我看到该方法导入multiprocessing util.py模块并使用它的方法(与其他一些方法合并)到trace,{{ 1}}和log子进程。

manage

研究了术语" bootstrap"稍微看看它在Python模块中的各种上下文中使用,并且最重要的是(除了可能是twitter bootstrap框架之外),参考统计中测量准确性的过程。

但在这种情况下,似乎函数名称可能指的是将各种元素联系在一起的方法?是这样的吗?

1 个答案:

答案 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

after it's spawned

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功能,然后清理。