`suption.pool.pool'中的``context''参数的含义是什么



contextclass multiprocessing.pool.Pool构造函数中的一个可选参数。文件仅说:

context可用于指定用于启动工作过程的上下文。通常使用函数multiprocessing.Pool()或上下文对象的Pool()方法创建池。在这两种情况下,上下文都适当设置。

它没有澄清什么是"上下文对象",为什么class Pool构造函数需要它以及在提到的方案中"适当设置"的含义。

根据平台,多处理支持启动过程的三种方法。这些开始方法是:

  • Spawn:

    父过程启动了新的python解释器过程。
    在Unix和Windows上可用。Windows上的默认值。

  • fork:

    父过程使用os.fork((将python解释器分叉。仅在UNIX上可用。UNIX上的默认值。

  • forkserver

    程序启动并选择Forkserver启动方法时,启动了服务器进程。从那时起,每当需要一个新的过程时,父进程都会连接到服务器,并要求它为新过程提供。叉服务器进程是单线线程,因此使用os.fork((是安全的。没有继承不必要的资源。

    在Unix平台上可用,这些平台支持通过Unix Pipes传递文件描述符。


要选择一个启动方法,请在主模块的if __name__ == '__main__'子句中使用set_start_method((。例如:

import multiprocessing as mp
def foo(q):
    q.put('hello')
if __name__ == '__main__':
    mp.set_start_method('spawn')
    q = mp.Queue()
    p = mp.Process(target=foo, args=(q,))
    p.start()
    print(q.get())
    p.join()

另外,您可以使用get_context((获得上下文对象。上下文对象具有与多处理模块相同的API,并且允许一个人在同一程序中使用多个启动方法。

import multiprocessing as mp
def foo(q):
    q.put('hello')
if __name__ == '__main__':
    ctx = mp.get_context('spawn')
    q = ctx.Queue()
    p = ctx.Process(target=foo, args=(q,))
    p.start()
    print(q.get())
    p.join()

这是上下文对象来自!

相关内容

最新更新