max*_*max 10 python multiprocessing python-3.x
context是构造函数中的可选参数class multiprocessing.pool.Pool.文档只说:
context可用于指定用于启动工作进程的上下文.通常使用上下文对象的函数multiprocessing.Pool()或Pool()方法创建池.在两种情况下,上下文都是适当的.
它没有说明"上下文对象"是什么,为什么class Pool构造函数需要它,以及它在所提到的场景中"适当地设置"意味着什么.
gus*_*ong 10
根据平台的不同,多处理支持三种启动流程的方法.这些启动方法是:
产卵:
父进程启动一个新的python解释器进程.
可在Unix和Windows上使用.Windows上的默认设置.
叉子:
父进程使用os.fork()来分叉Python解释器.仅适用于Unix.Unix上的默认值.
forkserver
当程序启动并选择forkserver start方法时,将启动服务器进程.从那时起,每当需要一个新进程时,父进程就会连接到服务器并请求它分叉一个新进程.fork服务器进程是单线程的,因此使用os.fork()是安全的.没有不必要的资源被继承.
可在Unix平台上使用,支持通过Unix管道传递文件描述符.
要选择start方法,请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()
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用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()
Run Code Online (Sandbox Code Playgroud)
这是上下文对象的来源!
| 归档时间: |
|
| 查看次数: |
2616 次 |
| 最近记录: |