我有一长串用户(大约200,000)和df
带有其属性的相应数据框。现在,我想编写一个for循环来衡量用户的成对相似度。代码如下:
df2record = pd.DataFrame(columns=['u1', 'u2', 'sim'])
for u1 in reversed(user_list):
for u2 in reversed(list(range(1, u1))):
sim = measure_sim(df[u1], df[u2]))
if sim < 0.6:
continue
else:
df2record = df2record.append(pd.Series([u1, u2, sim], index=['u1', 'u2', 'sim']), ignore_index=True)
现在,我想通过多处理运行此for循环,并且我已经阅读了一些教程。但是我仍然不知道如何正确处理它。似乎我应该先设置合理数量的进程,例如6
。然后,我应该将每个循环都放入一个进程中。但是问题是我如何才能知道某个过程中的任务已经完成,以便可以开始新的循环?你能帮我吗?预先谢谢您!
您可以使用multiprocessing.Pool,它提供map
了在给定的可迭代范围内映射进程池的方法。这是一些示例代码:
def pairGen():
for u1 in reversed(user_list):
for u2 in reversed(list(range(1, u1))):
yield (u1, u2)
def processFun(pair):
u1, u2 = pair
sim = measure_sim(df[u1], df[u2]))
if sim < 0.6:
return None
else:
return pd.Series([u1, u2, sim], index=['u1', 'u2', 'sim'])
def main():
with multiprocessing.Pool(processes=6) as pool:
vals = pool.map(processFun, pairGen())
df2record = pd.DataFrame(columns=['u1', 'u2', 'sim'])
for v in vals:
if vals != None:
df2record = df2record.append(v, ignore_index=True)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句