gpt4 book ai didi

python - 为什么我的 python 多处理脚本在 Windows 上运行而不在 Linux 上运行?

转载 作者:可可西里 更新时间:2023-11-01 11:51:19 25 4
gpt4 key购买 nike

我已经在 Windows 上成功地实现了一个多进程脚本,但是同一个脚本在 linux 上启动了一个“RuntimeError: already started”并停止了执行。该脚本由以下“main.py”组成(为了便于阅读省略了部分内容):

from multiprocessing import freeze_support

if __name__ == '__main__':
#MULTIPROCESSING STUFF
freeze_support()

#DO SOME STUFF

#Call my multiprocessing-function in other module
mod2.func(tileTS[0], label, areaconst)

和“mod2.py”模块:

import numpy as np
from multiprocessing import Pool
from functools import partial
import os, time

def func(ts, label, areaconst):
#SETTING UP/LOADING SOME VARIABLES

for idx in totImgs:
img_ = myList[idx]

p = Pool(2)
result = p.map( partial(_mp_avg, var1=var1_, img=img_), range(totObjs) )

p.close()
p.join()

#MANAGE RESULTING VARIABLES

return None


def _mp_avg(idx, img, var1):
num = idx + 1
arr = img[var1==num]
if np.isnan(arr).any():
return np.nan
else:
return np.sum( arr )

此错误在脚本执行“Pool.map”函数/类时启动(未知)。相同的代码在 Windows 上完美运行。

我正在使用 Ubuntu 18.04 并从 Visual Studio Code 启动 python 3.6.7 脚本。

编辑:添加了运行时错误的截图 Terminal Error message

最佳答案

正如@Darkonaut 所指出的,Visual Studio Code 使用 ptvsd 作为调试器,这不是 fork-save ( https://github.com/Microsoft/ptvsd/issues/1046#issuecomment-443339930 )。由于在 Linux 上,默认进程生成方法是“os.fork()”,如果从 VSCode 中执行,脚本将生成 RuntimeError。这不会发生在 Windows 上。Linux 上的解决方案是:

  • 通过在主函数调用后插入一次以下行来更改启动方法:

    multiprocessing.set_start_method("spawn")
  • 使用 VSCode 编辑代码并从终端启动。

  • 更改 IDE。

  • 等待 fork-save 调试器更新,据说它正在工作。

检查以下链接以获取有关该问题的更多信息: https://docs.python.org/3/library/multiprocessing.html#contexts-and-start-methods

关于python - 为什么我的 python 多处理脚本在 Windows 上运行而不在 Linux 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55615981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com