Python的multiprocessing.Pool和内存(Python multiprocess

2019-10-18 09:06发布

我使用Pool.map一个进球过程:

  1. “光标”与数以百万计阵列的来自数据源
  2. 计算
  3. 结果保存在数据宿

结果是独立的。

我只是想知道,如果我能避免内存需求。 起初,似乎每个阵列进入蟒蛇,然后在2和3进行。 无论如何,我有一个速度的提高。

#data src and sink is in mongodb#
def scoring(some_arguments):
        ### some stuff  and finally persist  ###
    collection.update({uid:_uid},{'$set':res_profile},upsert=True)


cursor = tracking.find(timeout=False)
score_proc_pool = Pool(options.cores)    
#finaly I use a wrapper so I have only the document as input for map
score_proc_pool.map(scoring_wrapper,cursor,chunksize=10000)

我是不是做错了什么或有使用Python用于此目的的更好的办法?

Answer 1:

map一个功能Pool在内部转换可迭代到一个列表,如果它不具有__len__属性。 相关的代码是在Pool.map_async ,作为所使用的Pool.map (和starmap ),以产生结果-这也是一个列表。

如果您不想先读所有的数据到内存中,你应该使用Pool.imapPool.imap_unordered ,这将产生一个迭代,因为他们进来,将产生的结果。



文章来源: Python multiprocessing.Pool & memory