如何有效地在python的“ for-loop”中应用多线程?

问题描述

我正在for循环中计算两个值之间的余弦值,我想知道如何在我的程序中应用多线程并提高效率。

from sklearn.metrics.pairwise import cosine_similarity
import time

questionset=[]
for i in range(0,8000):
    questionset.append(i)


cos_sims=[]



start_time = time.time()
for question in questionset:
   sims = cosine_similarity(question,0.5)
   cos_sims.append(sims)
print("--- %s seconds in question filter---" % (time.time() - start_time))

完成用于cos值计算的循环的时间大约是1秒,我希望它以毫秒为单位减少

解决方法

使用多处理库,您可以使用文档中的此示例的Pool映射

from multiprocessing import Pool

def f(x):
    return x*x

if __name__ == '__main__':
    with Pool(multiprocessing.cpu_count()) as p:
        print(p.map(f,[1,2,3]))

仅将cosine_simularity用作f,而不是将其打印出来,而是将其分配到您的输出列表(cos_sims)