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

标签 python process tensorflow multiprocessing

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

How can I restrict the scope of a multiprocessing process?

这似乎包括导入的模块。对于在 __init__ 中有副作用的模块来说,这是一个问题。 Tensorflow 就是这样一个模块,一旦它被导入,它就会尝试为 GPU 分配内存。这会导致子进程崩溃,因为父进程已经执行了该操作。

有什么好的方法可以避免在fork进程中加载​​tensorflow模块吗?

Ubuntu (posix) 上的 Python 2.7

最佳答案

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

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

关于python - 如何避免使用 Python 多处理在 fork 进程中加载​​父模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641543/

相关文章:

Python-requests + Django 更改 URL 中的参数结构

python:无法从用户定义的函数返回 pandas 数据框(可能是用户错误)

python - str.replace() 或组合两个切片是删除字符的更好方法吗?

python - 选择随机 Action 的 Tensorflow 代理

python - 未实现错误 : `fit_generator` is not yet enabled for unbuilt Model subclasses

c - 从 `setuid` 进程检测父进程死亡

linux - 进程 sighandler 可以处理 linux 信号 SIG_KILL 吗?

c - 进程似乎不会减少信号量

python - 值错误 : object __array__ method not producing an array

java - 我训练的图像分类器模型对所有不属于该类别的图像进行分类