如何解决发生 fork 时,主进程中的 Numpy 线程池大小会发生变化
在导入 Numpy 时,Numpy 使用的底层 BLAS 库会分配一个线程池。这是意料之中的,只需运行即可观察到:
cat /proc/<my python pid>/status | grep Threads
奇怪的是,如果我的主进程调用 fork()
,所有这些线程都会在我的主进程中消失。需要明确的是,这是主进程(我知道分叉进程不保留父线程的副本)。
这种行为很容易重现。确切的线程数可能因机器而异:
import numpy as np # main process has 36 threads
import os
os.fork() # main process has 1 thread
我想了解这种行为及其来源,但我很难追踪它。
我使用的是 Python 3.6.9
和 Numpy 1.18.4
。
解决方法
经过一番挖掘,这里解释了行为的原因: https://github.com/xianyi/OpenBLAS/issues/294
另外值得注意的是,如果我尝试在需要 Numpy 使用底层 BLAS 库的 fork()
之后进行计算,则会再次产生线程。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。