如何避免使用Pythons多处理将父模块加载到分叉过程中



当您使用python的multiprocessing创建过程的Pool时,这些过程将在父进程中分叉,并且在子进程中显示全球,请在下面的问题中指出:

如何限制多处理过程的范围?

这似乎包括导入的模块。这是在__init__中具有副作用的模块的问题。TensorFlow就是这样的模块,一旦导入它,它就会尝试将内存分配给GPU。这导致子过程崩溃,因为父母已经采取了该操作。

有没有一个很好的方法来避免在分叉过程中加载张量的模块?

python 2.7在ubuntu(posix(

在大量调试之后,我意识到我的问题陈述真的不够。问题是我确实在一个子过程之一(我忘记!(中加载了TensorFlow,并且仅使用CPU而不是GPU所需的子过程。我被迫更改环境变量以通过以下方式禁用子流程上的cuda

os.environ['CUDA_VISIBLE_DEVICES'] = ''
p = multiprocessing.Pool(processes=4)
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

除了戴维·帕克斯(David Parks(的自我答案之外,在导入tensorflow或可能被os.fork()毁坏的模块之前,创建Pool和Worker实例更安全。

相关内容

  • 没有找到相关文章

最新更新