【问题标题】:How to reduce for loop execution time using multiprocessing in python如何在 python 中使用多处理来减少循环执行时间
【发布时间】:2019-12-13 06:56:12
【问题描述】:

我有两个列表。列表 X 包含 1000 个单词。列表 Y 包含 500 个单词。我正在尝试为列表 X 找到与 Y 相关的相似词。

我正在使用 Spacy 的相似函数。

我面临的问题是执行的for循环部分需要很长时间。我从研究中了解到,在 python 中,多线程只会产生并发的错觉,因此并没有任何真正的性能提升。因此,我认为多处理是一种方式,但我是多处理使用的新手,因此请求帮助。

如何通过python中的多处理加快for循环部分的执行?

以下是我的代码。

import en_vectors_web_lg
nlp = en_vectors_web_lg.load()
ListX =['HSBC', 'JP Morgan',......] #500 words lists
ListY = ['Currency','Blockchain'.......] #1000 words lists
s_words = []
for token1 in ListY:
    list_to_sort = [] 
    for token2 in ListX:    
        list_to_sort.append((token1, token2,nlp(str(token1)).similarity(nlp(str(token2)))))
        sorted_list = sorted(list_to_sort, key = itemgetter(2), reverse=True)[0][:2]
        s_words.append(sorted_list)

【问题讨论】:

标签: python python-3.x for-loop multiprocessing spacy


【解决方案1】:

你可以试试这个:

import en_vectors_web_lg


nlp = en_vectors_web_lg.load()


def compare_function(token1, token2, nlp):
    return token1, token2, nlp(str(token1)).similarity(nlp(str(token2)))

from multiprocessing import Pool
import itertools

tokenlist = [(a,b, nlp) for a, b in itertools.product(ListX, ListY)]


p = Pool(8)

results = p.map(compare_function, tokenlist)

如果你在windows下,使用

if __name__ == '__main__':
    results = p.map(compare_function, tokenlist)

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多