Python:在后台编写多进程共享列表

时间:2015-07-22 20:26:56

标签: python python-multiprocessing

我相信我即将问一个明确的新手问题,但这里有:

我编写了一个执行snmp查询的python脚本。 snmp查询函数使用全局列表作为其输出。

def get_snmp(community_string, mac_ip):
    global output_list

    snmp get here

    output_list.append(output_string)

使用以下代码启动get_snmp查询器:

pool.starmap_async(get_snmp, zip(itertools.repeat(COMMUNITY_STRING),    input_list))
pool.close()
pool.join()

if output_file_name != None:
        csv_writer(output_list, output_file_name)

此设置正常,所有get_snmp进程都将其输出写入共享列表output_list,然后调用csv_write函数并将该列表转储到磁盘。

这个程序的主要问题是在大量运行时,内存使用量会随着列表的构建而变得非常高。我想在后台将结果写入文本文件以降低内存使用率,我不知道该怎么做。我使用全局列表来消除文件锁定问题。

2 个答案:

答案 0 :(得分:0)

我认为增加内存使用量的主要问题是在将文件写入文件时不会从该列表中删除内容。 也许你应该在将其写入文件后del output_list[:]进行。

答案 1 :(得分:0)

让每个工作人员将他们的输出写入Queue,然后让另一个工作者(或主线程)从队列中读取并写入文件。这样你就不必将所有东西存放在内存中。

不要直接写入工作人员的文件;否则你可能会遇到多个进程试图同时写入同一个文件的问题,这会让你头疼,直到你修复它为止。