减少Python进程的内存使用量

时间:2015-06-09 22:01:16

标签: python memory process

我正在研究需要进程的代码,我对每个进程使用的内存感到惊讶。我没有关于进程和线程的广泛知识,也许它确实合乎逻辑,但我找不到内存消耗的原因,以及如何减少它。

以下代码创建一个大的'info'变量,并创建几乎没有信息的5个进程:

from multiprocessing import Process, Manager
import time

def proc(speific_list, some_info):
    time.sleep(10)

def jobs():
    manager = Manager()
    specific_list = manager.list()
    jobs = []
    info = "Hello"
    for i in xrange(0,25):
        info += info
    for job_id in xrange(0,5):
        d = Process(name='proc', target=proc, args=(specific_list, 35))
        d.daemon = True            
        d.start()
        jobs.append(d)

    for job in jobs:
        job.join()

if __name__ == '__main__':
    jobs()

问题是主进程将有大约170MB的'info'变量,并且不会将其发送到其他进程。但是每个进程都需要170MB,即使我从未发送过这个变量。现在我使用一个非常难看的解决方案来避免这个问题 - 使用文件,在创建进程之前销毁'info',只读取文件中需要的东西 - 但这只是一个补丁,肯定有另一个解决方案。

  1. 为什么每个进程都获得主进程使用的变量的副本?
  2. 如何避免?
  3. 编辑:

    对于我的特定情况,'info'是一个600MB的列表,每个进程都会收到'info'的一部分,一个工作的解决方案似乎将列表复制到manager.list()并销毁最初的'info'。这样我可以减少内存使用量。但我希望有一个解决方案适用于更一般的项目。在创建流程之前删除最大的变量并不方便 - 也不总是可行。

0 个答案:

没有答案