【发布时间】:2021-06-03 18:34:40
【问题描述】:
我是这个多处理概念的新手。我正在尝试对拼写函数实现多处理以使其运行得更快。我尝试如下,但没有按之前的顺序得到结果,token 这里是标记化句子的巨大列表。
from spellchecker import SpellChecker
from wordsegment import load, segment
from timeit import default_timer as timer
from multiprocessing import Process, Pool, Queue, Manager
def text_similarity_spellings(self, token):
"""Uses spell checker to separate incorrect spellings and correct them"""
spell = SpellChecker()
unknown_words = [list(spell.unknown(word)) for word in token]
known_words = [list(spell.known(word)) for word in token]
load()
segmented = [[segment(word) for word in sub] for sub in unknown_words]
flat_list = list(self.unpacker(segmented))
new_list = [[known_words[x], flat_list[x]] for x in range(len(known_words))]
new_list = list(self.unpacker(new_list))
newlist = [sorted(set(mylist), key=lambda x: mylist.index(x)) for mylist in new_list]
return newlist
def run_all(self):
tread_vta = Manager().list()
processes = []
arg_split = np.array_split(np.array(token),10)
arg_tr_cl = []
finds = []
trdclean1 = []
for count, k in enumerate(arg_split):
arg_tr_cl.append((k, [], tread_vta, token[t]))
for j in range(len(arg_tr_cl)):
p = Process(target= self.text_similarity_spellings, args=arg_tr_cl[j])
p.start()
processes.append(p)
for p in processes:
p.join()
谁能建议我一种更好的方法来将多处理应用于特定函数并以正确的顺序获得结果?
【问题讨论】:
-
我认为您的应用程序更适合
map,特别是如果您关心订单。 Process 更适合异步操作,您不关心结果是否以相同的顺序返回。这是因为单个进程可以更快地完成 // 更慢
标签: python multiprocessing python-multiprocessing spell-checking