多进程队列 - 高RAM消耗

时间:2016-07-14 19:15:48

标签: python memory multiprocessing

我设置multiprocessing.Queue代码并行运行2个函数。第一个func解析并将数据写入文本文件,第二个函数从同一文本文件中提取数据并显示实时图形。一旦第一个func创建了一个文本文件,第二个func必须启动。代码效果很好。

然而:

  1. 几乎所有的RAM(约6gb),是因为是一个多进程?在任务管理器中我看到3个python.exe进程同时运行2gb,而当我只运行第一个func(消耗最多的RAM)时,我只能看到1个2gb的python.exe。

  2. 一旦代码解析了所有文本并且图形停止,进程一直在运行,直到我使用eclipse console红色按钮手动终止代码,这是正常的吗?

  3. 我有一个在多进程函数之前和之外运行的小脚本。它提供了我需要定义的值,以便运行多进程函数。它运行正常,但一旦调用了多进程函数,它就会再次运行!!我不知道为什么,因为它绝对不属于多进程功能。

  4. 其中一部分已在另一个stackoverflow question中得到解决。

    define newlista
    define key
    def get_all(myjson, kind, type)
    def on_data(data)
    small script run out of the multi-process function
    
    
    def parsing(q):
        keep_running = True
        numentries = 0
        for text in get_all(newlista, "sentence", "text"):
            if 80 < len(text) < 500:
                firstword = key.lower().split(None, 1)[0]
                if text.lower().startswith(firstword):
                    pass
                else:
                    on_data(text)
                    numentries += 1
                    q.put(keep_running)
    
        keep_running = False
        q.put(keep_running)
    
    def live_graph(q):
        keep_running = True
        while keep_running:
            keep_running = q.get()
            # do the graph updates here
    
    if __name__=='__main__':
        q = Queue()
        p1 = Process(target = writing, args=(q,))
        p1.start()
        p2 = Process(target = live_graph, args=(q,))
        p2.start()
    

    更新

    图形函数是生成两个.py进程的函数,一旦第一个函数终止,第二个函数就会继续运行。

0 个答案:

没有答案