Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “multiprocessing.pool.pool”中“context”参数的含义是什么?_Python_Python 3.x_Multiprocessing - Fatal编程技术网

Python “multiprocessing.pool.pool”中“context”参数的含义是什么?

Python “multiprocessing.pool.pool”中“context”参数的含义是什么?,python,python-3.x,multiprocessing,Python,Python 3.x,Multiprocessing,context是类multiprocessing.pool.pool的构造函数中的可选参数。只说: context可用于指定用于启动工作进程的上下文。通常使用上下文对象的函数multiprocessing.pool()或pool()方法创建池。在这两种情况下,上下文都被适当地设置 它没有阐明什么是“上下文对象”,为什么类池构造函数需要它,以及在上述场景中它“被适当设置”的含义。根据平台的不同,多处理支持三种启动进程的方法。这些启动方法包括: 繁殖: 父进程启动一个新的python解释器进程。

context
是类multiprocessing.pool.pool的构造函数中的可选参数。只说:

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


它没有阐明什么是“上下文对象”,为什么
类池
构造函数需要它,以及在上述场景中它“被适当设置”的含义。

根据平台的不同,多处理支持三种启动进程的方法。这些启动方法包括:

  • 繁殖:

    父进程启动一个新的python解释器进程。
    可在Unix和Windows上使用。Windows上的默认设置

  • 叉子:

    父进程使用os.fork()来派生Python解释器。 仅在Unix上可用。Unix上的默认值

  • 叉服务器

    当程序启动并选择forkserver启动方法时,服务器进程启动。从那时起,每当需要一个新进程时,父进程就会连接到服务器并请求它派生一个新进程。fork服务器进程是单线程的,因此使用os.fork()是安全的。不会继承任何不必要的资源

    在支持通过Unix管道传递文件描述符的Unix平台上可用


要选择启动方法,请使用主模块的
if uuuuu name_uuuu=='\uuuuu main_uuu'
子句中的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()

这就是上下文对象的来源

如果我没有放弃在文档页面中搜索单词
context
,在一些关于上下文管理器的无关匹配之后:)上下文实际上非常有用。例如,在Unix上,
multiprocessing.Pool
默认使用
fork
start方法启动进程。如果希望它使用不同的启动方法,只需创建上下文,然后使用
ctx.Pool