0

特定のユーザーへの推奨事項をファイルにピクルするメソッド getRecommendations を呼び出したいと思います。動作する本のコードを使用しました。しかし、1 つのコアだけが機能することがわかりました。すべてのコアが機能するようにしたいと考えています。

これが方法です。

def getRecommendations(prefs,person,similarity=sim_pearson):
    print "working on recommendation"
    totals={}
    simSums={}
    for other in prefs:
    # don't compare me to myself
        if other==person: continue
        sim=similarity(prefs,person,other)
        # ignore scores of zero or lower
        if sim<=0: continue
        for item in prefs[other]:
            # only score movies I haven't seen yet
            if item not in prefs[person] or prefs[person][item]==0:
                # Similarity * Score
                totals.setdefault(item,0)
                totals[item]+=prefs[other][item]*sim
                # Sum of similarities
                simSums.setdefault(item,0)
                simSums[item]+=sim
    # Create the normalized list
    rankings=[(total/simSums[item],item) for item,total in totals.items( )]
    # Return the sorted list
    rankings.sort( )
    rankings.reverse( )
    ranking_output = open("data/rankings/"+str(int(person))+".ranking.recommendations","wb")
    pickle.dump(rankings,ranking_output)
    return rankings

経由で呼び出されます

for i in customerID: 
        print "working on ", int(i)
        #Make this working with multiple CPU's
        getRecommendations(pickle.load(open("data/critics.recommendations", "r")), int(i))

ご覧のとおり、すべてのお客様に推奨するようにしています。これは後で使用されます。

では、このメソッドをマルチプロセスするにはどうすればよいですか? いくつかの例やドキュメントを読んでもわかりません

4

2 に答える 2

0

次のような(大まかに、テストされていない)ものが必要です。

from multiprocessing import Pool
NUMBER_OF_PROCS = 5 # some number... not necessarily the number of cores due to I/O

pool = Pool(NUMBER_OF_PROCS)

for i in customerID:
    pool.apply_async(getRecommendations, [i])

pool.close()
pool.join()

(pickle.load は 1 回だけ実行する必要があるため、これは getRecommendations に 'i' のみを渡すことを前提としています)

于 2013-08-28T12:06:42.817 に答える
0

ジェームズが出した答えは正しいものです。追加しますが、次の方法でマルチプロセッシングモジュールをインポートする必要があります。

from multiprocessing import Pool

また、Pool(4) は、タスクを実行するために並行して動作する 4 つの「ワーカー」プロセスを作成することを意味します。

于 2013-08-28T13:52:55.047 に答える