首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在`multiprocessing.pool.Pool`中,“`context`”论点的含义是什么?

在`multiprocessing.pool.Pool`中,“`context`”论点的含义是什么?
EN

Stack Overflow用户
提问于 2017-05-06 08:48:13
回答 1查看 12.3K关注 0票数 25

contextclass multiprocessing.pool.Pool构造函数中的可选参数。文档只说:

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

它没有说明“上下文对象”是什么,为什么class Pool构造函数需要它,以及在上述场景中它“被适当设置”意味着什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-06 09:27:13

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

  • 产卵: 父进程启动一个新的python解释器进程。 可在Unix和Windows上使用。Windows上的默认设置。
  • 叉子: 父进程使用os.fork()对Python解释器进行分叉。仅在Unix上可用。Unix的默认设置。
  • 叉服务器 当程序启动并选择叉服务器启动方法时,将启动服务器进程。从那时起,每当需要一个新进程时,父进程就会连接到服务器,并请求它转发一个新进程。叉服务器进程是单线程的,所以使用os.fork()是安全的。没有任何不必要的资源被继承。 在Unix平台上可用,这些平台支持在Unix管道上传递文件描述符。

要选择一个start方法,您可以在主模块的set_start_method子句中使用if __name__ == '__main__' ()。例如:

代码语言:javascript
复制
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,并允许在同一个程序中使用多个启动方法。

代码语言:javascript
复制
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()

这就是上下文对象的来源!

票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43818519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档