为什么concurrent.futures会增加vms内存?

时间:2017-08-14 20:36:45

标签: python multithreading concurrent.futures psutil

我发现当我使用Python的concurrent.futures.ThreadPoolExecutor时,vms内存使用(由psutil报告)会显着增加。

In [1]: import psutil

In [2]: psutil.Process().memory_info().vms / 1e6
Out[2]: 360.636416

In [3]: from concurrent.futures import ThreadPoolExecutor

In [4]: e = ThreadPoolExecutor(20)

In [5]: psutil.Process().memory_info().vms / 1e6
Out[5]: 363.15136

In [6]: futures = e.map(lambda x: x + 1, range(100))

In [7]: psutil.Process().memory_info().vms / 1e6
Out[7]: 1873.580032

In [8]: e.shutdown()

In [9]: psutil.Process().memory_info().vms / 1e6
Out[9]: 1722.51136

这似乎与线程数有些成比例。

1 个答案:

答案 0 :(得分:1)

您可能正在遇到这种情况(假设您使用的是Linux):

https://siddhesh.in/posts/malloc-per-thread-arenas-in-glibc.html

即使RSS没有增加太多,这也会使虚拟内存大小膨胀。

(顺便说一句,VMS在其他情况下可能会产生误导,例如在CUDA中,驱动程序会扩展进程的虚拟内存空间,以便与系统中的所有CUDA设备创建统一的地址空间。)< / p>