无通信的Python多核

2024-10-04 09:30:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想调用一个getRecommendations方法,该方法只是将对特定用户的建议提取到一个文件中。我用了一本书中的代码。但我看到只有一个核心工作,我希望我所有的核心都能完成工作,因为这样会更快。在

这是方法。在

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

它叫做via

^{pr2}$

如你所见,我试着给每一位顾客推荐。稍后将使用。在

那么如何对这种方法进行多处理呢?我不是通过阅读几个例子甚至是documentation来理解的


Tags: 方法in核心forifsimitemprefs
2条回答

粗略地说,你想要的是:

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()

(这是假设您只将'i'传入getRecommendations,因为酸洗。装载只能执行一次)

詹姆斯给出的答案是正确的。我要补充的是,您需要通过导入多处理模块

from multiprocessing import Pool

而且,池(4)意味着您要创建4个并行工作的“工作”进程来执行您的任务。在

相关问题 更多 >