![](/img/trans.png)
[英]How to use result of function as an argument of the same function multiple times?
[英]How to use parallel processing to call the same function multiple times?
如何讓這個任務更快完成? generate_ngrams_from_file() 的 3 次調用可以並行完成嗎? 剛進入python,不知道如何讓它更快。 我認為多處理或線程應該可以完成這項工作,但不知道如何去做。 這看起來像一個典型的任務可以同時完成以在我的 Mac 機器上使用多個內核。
def tokenize(text):
return [token for token in text.split(' ')]
def generate_ngrams(text, n):
tokens = tokenize(text)
ngrams = zip(*[tokens[i:] for i in range(n)])
return [''.join(ngram) for ngram in ngrams]
def generate_ngrams_from_file(input, out, n):
count = 0
with open(input, 'r') as f:
for line in f:
count += 1
if line:
ngrams = generate_ngrams(line, n)
if n == 2:
bigrams.update(ngrams)
elif n == 3:
trigrams.update(ngrams)
elif n == 4:
fourgrams.update(ngrams)
elif n == 5:
fourgrams.update(ngrams)
print("Ngram done!")
if __name__ == "__main__":
start = time.time()
input_file = 'bigfile.txt'
output_3_tram = '3gram.txt'
output_4_tram = '4ngram.txt'
output_5_tram = '5ngram.txt'
print('Generate trigram: ')
generate_ngrams_from_file(input_file, output_3_tram, 3)
print("Generate fourgrams: ")
generate_ngrams_from_file(input_file, output_4_tram, 4)
print("Generate fivegrams: ")
generate_ngrams_from_file(input_file, output_5_tram, 5)
end = time.time()
mytime(start, end)
由於 Python 的全局解釋器鎖定功能,Python 中的多線程不是一個很好的主意。 你可以在這里閱讀它https://www.geeksforgeeks.org/what-is-the-python-global-interpreter-lock-gil/ 。 多處理是使您的程序更快的更好選擇。 您可以將generate_ngrams()
函數放在multiprocessing
模塊的Process
類中。 在https://docs.python.org/2/library/multiprocessing.html閱讀有關Process
類的信息。 推薦使用Process
類,因為它比pool.apply()
和pool.apply_async()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.