NLTK - 修改多处理的嵌套 for 循环
NLTK - Modifying nested for loop for multiprocessing
目前,我有一个用于修改列表的嵌套 for 循环。我试图在使用多处理时创建相同的输出。
我当前的代码是,
for test in test_data:
output.append([((ngram[-1], ngram[:-1],model.score(ngram[-1], ngram[:-1])) for ngram in
test])
其中test_data是生成器对象,model.score来自NLTK包。
我找到并尝试过的所有解决方案都不起作用(至少在我的情况下)。
有没有办法通过多处理获得相同的输出?
当谈到多处理时,我相信最简单的方法是使用 joblib
包...要使用这个包,您需要做的就是创建一个函数,它需要一个项目生成器和 returns 一项的结果。
在你的情况下,它看起来像这样:
from joblib import Parallel, delayed
def func(test):
return [((ngram[-1], ngram[:-1], model.score(ngram[-1], ngram[:-1])) for ngram in test]
output = Parallel(n_jobs=4, backend="threading")(
delayed(func)(test) \
for test in test_data)
现在,output
是您要搜索的输出。您可以根据需要更改作业数量。但是,我建议将其设置为 multiprocessing.cpu_count()
,在我的例子中是 4
。
您还可以查看 official documentation 以获取更多示例。
目前,我有一个用于修改列表的嵌套 for 循环。我试图在使用多处理时创建相同的输出。
我当前的代码是,
for test in test_data:
output.append([((ngram[-1], ngram[:-1],model.score(ngram[-1], ngram[:-1])) for ngram in
test])
其中test_data是生成器对象,model.score来自NLTK包。
我找到并尝试过的所有解决方案都不起作用(至少在我的情况下)。
有没有办法通过多处理获得相同的输出?
当谈到多处理时,我相信最简单的方法是使用 joblib
包...要使用这个包,您需要做的就是创建一个函数,它需要一个项目生成器和 returns 一项的结果。
在你的情况下,它看起来像这样:
from joblib import Parallel, delayed
def func(test):
return [((ngram[-1], ngram[:-1], model.score(ngram[-1], ngram[:-1])) for ngram in test]
output = Parallel(n_jobs=4, backend="threading")(
delayed(func)(test) \
for test in test_data)
现在,output
是您要搜索的输出。您可以根据需要更改作业数量。但是,我建议将其设置为 multiprocessing.cpu_count()
,在我的例子中是 4
。
您还可以查看 official documentation 以获取更多示例。