1

私はPool.map採点手順に使用しています:

  1. データソースからの何百万もの配列を持つ「カーソル」
  2. 計算
  3. 結果をデータ シンクに保存する

結果は独立しています。

メモリ需要を回避できるかどうか疑問に思っています。最初は、すべての配列が python に入り、次に 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でより良い方法がありますか?

4

1 に答える 1

1

aのmap関数は、属性Poolを持たない場合、 iterable を内部的にリストに変換します。__len__関連するコードは にあります。これは(および)Pool.map_asyncによって結果を生成するために使用されます。これもリストです。Pool.mapstarmap

最初にすべてのデータをメモリに読み込みたくない場合は、Pool.imaporを使用する必要Pool.imap_unorderedがあります。これにより、結果が入ったときに結果を生成するイテレータが生成されます。

于 2013-07-16T09:23:06.750 に答える