如何使用 Python 多处理避免在分叉进程中加载​​父模块

Dav*_*rks 5 python process multiprocessing tensorflow

Pool当您使用 Python创建进程时multiprocessing,这些进程将分叉,父进程中的全局变量将显示在子进程中,如下面的问题所述:

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

这似乎包括导入的模块。对于在__init__. Tensorflow 就是这样的一个模块,一旦导入,它就会尝试向 GPU 分配内存。这会导致子进程崩溃,因为父进程已经采取了该操作。

有没有好的方法来避免在fork进程中加载​​tensorflow模块?

Ubuntu 上的 Python 2.7 (posix)

Dav*_*rks 1

经过多次调试后,我意识到我的问题陈述还不够充分。问题是我确实在子进程之一中加载了张量流(我忘记了!),并且子进程只需要使用 CPU,而不是 GPU。我被迫更改环境变量以在子进程上禁用 CUDA:

os.environ['CUDA_VISIBLE_DEVICES'] = ''
p = multiprocessing.Pool(processes=4)
os.environ['CUDA_VISIBLE_DEVICES'] = '0'
Run Code Online (Sandbox Code Playgroud)