私はリストをとり、ngrams
(ここではn = 2)のリストを返す関数を持っています。実行時間を短縮できるように、この関数をどのように並列化できますか?Pythonで関数を1つの引数で並列化するにはどうすればよいですか?
私はこれを試していますが、動作していません。 data_list
は文字列のリストです。
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)
正確には動作しません。エラーはありますか?結果は期待通りではありませんか? 'dummy'モジュールを使うと、並列化ができなくなります。並行処理は並列処理と同じではありません – karlson
@karlson結果は期待どおりではありません – sahil
結果が何であるか、期待したことで質問を拡張してみませんか? – karlson