在Python中如何用一个参数并行化函数?

在Python中如何用一个参数并行化函数?,python,Python,我有一个函数,它获取一个列表并返回n=2的ngram列表。如何将此函数并行化以减少运行时间 我试过了,但没用。数据列表是一个字符串列表 import multiprocessing from multiprocessing.dummy import Pool from collections import OrderedDict grams_list = [] data_list = ["Hello, I am learning Python", "Python is

我有一个函数,它获取一个列表并返回n=2的ngram列表。如何将此函数并行化以减少运行时间

我试过了,但没用。数据列表是一个字符串列表

import multiprocessing
from multiprocessing.dummy import Pool
from collections import OrderedDict

grams_list = []
data_list = ["Hello, I am learning Python",
             "Python is a very Powerful language",
             "And Learning python is easy" ]




def ngrams(input, n):
    input = input.split(' ')
    output = []    
    for i in range(len(input) - n + 1):
        output.append(input[i:i + n])
    return output

def generating_grams_list(data_list):
    for j in range(0, len(data_list)):
        grams = [' '.join(x) for x in ngrams(data_list[j], 2)]  # Creating ngrams
        grams_list.append(list(OrderedDict.fromkeys(grams)))  # removing duplicates
        # print "Creating ngrams list for each data string ", j
    return grams_list


if __name__ == '__main__':
    pool = Pool(multiprocessing.cpu_count())
    results = pool.map(generating_grams_list, data_list)
    pool.close()
    pool.join()

    for result in results:
        print("result", result)
首先,使用multiprocessing.dummy模块不会缩短程序的持续时间,因为它跨线程而不是进程分配工作。这意味着计算仍将仅在一个处理器上运行。有关并发性和并行性之间的区别,请参见示例

要实现真正的并行化,您需要将工作分散到多个进程上,例如,使用一个新的进程

如果我猜对了,为了解决您的实际问题,因为您没有确切说明您的问题是什么:

您可能希望data_list是字符串列表,而不是字符串列表。如果实际定义了data_list和grams_list,那么每次调用生成grams_list时都会发送一个字符串,这很可能不是您想要的,因为for循环没有任何意义,您将在字符上循环


作为旁注:rangelenx:funcx[j]中j的模式可以更好地写成enumeratex:funcitem中的j,item。

什么不起作用?有错误吗?结果是否不像预期的那样?使用虚拟模块不会得到任何并行化。并发性与parallelism@karlson结果不符合预期为什么不扩展您的问题,说明结果是什么,以及您希望得到什么?为什么使用multiprocessing.dummy?看见