【问题标题】:How can I minimize memory use with python multiprocessing?如何使用 python 多处理最小化内存使用?
【发布时间】:2016-06-03 16:26:24
【问题描述】:

我正在开展一个项目,该项目基本上需要我使用 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()

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

【问题讨论】:

  • hmmm... 尝试限制同时运行的进程数可能吗? ;)
  • @alfasin 我明白从概念上讲这就是我必须做的。我不明白该怎么做以及如何确保相应地重新分配流程。老实说,我仍然试图将多处理作为一个整体来解决

标签: python-2.7 python-multiprocessing


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 2010-10-17
    • 2021-06-08
    • 1970-01-01
    • 2014-02-24
    • 2011-04-03
    • 2011-09-03
    • 1970-01-01
    相关资源
    最近更新 更多