使用多处理时,打开的进程太多。早期流程有多接近?

时间:2017-11-22 03:43:07

标签: python multiprocessing openstreetmap

我是多处理新手,需要它来处理OpenStreet数据。我使用Python 3.5。我知道有一些问题涉及这个话题。但我更喜欢Process类的解决方案。当然,欢迎其他建议。

import overpy
api = overpy.Overpass()
result = api.query("""area[name="Aachen"]->.a;(rel(area.a)["building"];way(area.a)["building"];);(._;>;);out;""")

import multiprocessing as mp

def transfer(i,send_end):
    way = result.ways[i]

    bldg =  {'id':way.id,
             'nodeid':[way.nodes[h].id for h in range(len(way.nodes))],
             'coords':[(way.nodes[j].lat, way.nodes[j].lon) for j in range(len(way.nodes))],
            'tags':way.tags} 
    send_end.send(bldg)


if __name__=='__main__':
    jobs = []
    pipe_list = []
    for i in range(10000):
        recv_end, send_end = mp.Pipe(False)
        p = mp.Process(target=transfer,args=(i,send_end))
        jobs.append(p)
        pipe_list.append(recv_end)
        p.start()
   for proc in jobs:
       proc.join()

   result_list = [x.recv() for x in pipe_list]

问题是大约有60,000个对象,因此会启动很多进程。这压倒了我的系统和触发器:

OSError: [Errno 24] Too many open files

有人知道如何在循环结束前解放资源吗?我尝试在循环中使用join(),但后来,我不知道为什么,它不会使用所有核心。

0 个答案:

没有答案