如何在“中应用多线程”;for loop";在python中是否高效?

如何在“中应用多线程”;for loop";在python中是否高效?,python,python-3.x,python-2.7,python-multithreading,Python,Python 3.x,Python 2.7,Python Multithreading,我正在计算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:

我正在计算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秒,我希望它以毫秒为单位减少它。使用多处理库,您可以使用文档中的池映射,如本例所示

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

只需使用余弦模拟作为f,而不是打印它,将其分配到输出列表(cos_sims)

那么您尝试了什么?列表cos_sims中元素的顺序重要吗?您目前拥有的代码也无法运行。对于单处理器系统上的纯计算,多线程可能会增加处理时间。这更有可能通过改变算法来优化。余弦计算可能是一项昂贵的操作,因此在查找表中缓存余弦值可能会有所帮助。@Gledi顺序并不重要。尽管如@RufusVS所述,这可能不是最快的解决方案