我在Python中有一个机器学习应用程序。我正在使用 Python 中的multiprocessing
模块来并行化一些工作(特别是特征计算(。
现在,multiprocessing
在Unix变体和Windows操作系统上的工作方式不同。Unix (mac/linux):
fork/forkserver/spawnWindows:
spawn
为什么是多处理。进程在窗口和 Linux 上对于全局对象和函数参数的行为不同
由于spawn
在Windows上使用,因此多处理进程的启动速度非常慢。它从头开始加载Windows上每个进程的所有模块。
有没有办法加快在Windows上创建额外进程的速度?(使用线程而不是多个进程不是一种选择(
与其每次都创建多个新进程,我强烈建议使用 concurrent.futuresProcessPoolExecutor
,并在后台打开执行器。
这样,您就不会每次都创建一个新进程,而是将它们在后台打开,并使用模块的函数或队列和管道传递一些工作。
底线 - 不要每次都创建新流程。让他们保持开放状态并通过工作。