当前位置: 首页 > 知识库问答 >
问题:

随着Python的multiprocessing.pool,内存使用量不断增长

羊刚捷
2023-03-14

以下是程序:

#!/usr/bin/python

import multiprocessing

def dummy_func(r):
    pass

def worker():
    pass

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=16)
    for index in range(0,100000):
        pool.apply_async(worker, callback=dummy_func)

    # clean up
    pool.close()
    pool.join()
#!/usr/bin/python

import multiprocessing

ready_list = []
def dummy_func(index):
    global ready_list
    ready_list.append(index)

def worker(index):
    return index

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=16)
    result = {}
    for index in range(0,1000000):
        result[index] = (pool.apply_async(worker, (index,), callback=dummy_func))
        for ready in ready_list:
            result[ready].wait()
            del result[ready]
        ready_list = []

    # clean up
    pool.close()
    pool.join()

共有1个答案

沈思博
2023-03-14

我最近遇到了内存问题,因为我多次使用了multiprocessing函数,所以它不断产生进程,并将它们留在内存中。

下面是我现在使用的解决方案:

def myParallelProcess(ahugearray):
    from multiprocessing import Pool
    from contextlib import closing
    with closing(Pool(15)) as p:
        res = p.imap_unordered(simple_matching, ahugearray, 100)
    return res
 类似资料:
  • 问题内容: 我们最近对生产系统的观察告诉我们Java容器的常驻内存使用量正在增长。关于此问题,我们已经进行了一些调查,以了解为什么Java进程使用pmap之类的本地工具会比堆+线程堆栈+共享对象+代码缓存+等消耗更多的内存。结果,我们发现本机进程(可能是malloc / mmap)分配了一些64M内存块(成对): 我将0000000720000000 3670016K的行解释为我们使用JVM参数“

  • 问题内容: 我们最近对生产系统的观察告诉我们Java容器的常驻内存使用量正在增长。关于此问题,我们已经进行了一些调查,以了解为什么Java进程使用诸如pmap之类的本地工具比堆+线程堆栈+共享对象+代码缓存+等消耗更多的内存。结果,我们发现本机进程(可能是malloc / mmap)分配了一些64M内存块(成对): 我将0000000720000000 3670016K的行解释为我们使用JVM参数

  • 问题是,那些块是什么?哪个子系统分配这些? 更新:我们不使用JIT和/或JNI本机代码调用。

  • 我们有几个虚拟机在生产中运行数据服务,客户机向数据服务发送Restful HTTP请求,负载很重(通常每个主机每秒500个请求),每个虚拟机上的负载总是平衡的。我们在所有主机上都有相同的配置(2个CPU,) 两天前,我们看到其中5个虚拟机上的旧gen堆使用量开始增长(每天300 MB),其他虚拟机上的旧gen堆使用量保持不变(大约80 MB),我们正在努力找出根本原因,请问这是内存泄漏问题还是正常

  • 我使用的是Android studio 3.1.3(编写本文时的最新版本)和Gradle 3.1.3。 我不知道这是否重要,但我最近升级到了Ubuntu18.04 每当我启动Android studio时,它都是从非常小的内存占用开始的。(一个名为java的进程占用大约1GB的RAM) 还有其他人面临这个问题吗?当我在Ubuntu16.04和旧的android工作室时,这不是问题。Ubuntu一定

  • 我有一个正在运行的Spark Streaming应用程序,它使用mapWithState函数来跟踪RDD的状态。该应用程序可以正常运行几分钟,但随后会崩溃 我观察到,Spark应用程序的内存使用量随着时间的推移呈线性增加,尽管我已经为mapWithStateRDD设置了超时。请参阅下面的代码片段和内存使用情况- 如果每个RDD都有一个显式超时,为什么内存会随着时间线性增加? 我已经尝试增加内存,但