如何使用python多处理最小化内存使用?

时间:2016-06-03 16:26:25

标签: python-2.7 python-multiprocessing

我正在开发一个基本上要求我使用ping处理少于10,000个IP地址的项目。不幸的是,如果我尝试处理2,000个IP附近的某个地方,我就会在8GB机器上运行并崩溃。以下是我的代码(我从Fast ping sweep in python获得了大部分代码):

logs = open('addresses.txt', 'r').readlines()
pool = [ multiprocessing.Process(target=pinger, args=(jobs,results)) for log in logs ]
for p in pool:
    p.start()
for i in logs:
    jobs.put(i)
for p in pool:
    jobs.put(None)
for p in pool:
    p.join()

我对多处理非常陌生,但我想知道是否有某些方法我仍然可以使用它但是为一小部分日志分配作业以便以牺牲时间为代价来抢救内存,这样当作业完成后,可以将它们重新分配给未处理的日志。对不起,如果不清楚 - 再次,对此不熟悉。

1 个答案:

答案 0 :(得分:1)

想出来。我导入了itertools并将列表理解改为:

pool = [ multiprocessing.Process(target=pinger, args=(jobs,results)) for log in itertools.islice(logs, 0, some_number_small_enough) ]