我想在多线程环境中访问nltk.corpus.wordnet。一旦启用多线程,synsets()之类的方法就会失败。如果我禁用它,一切都会正常的。
错误信息会改变。例如,错误可能如下所示,这在我看来非常类似于竞赛条件:
File "/home/lhk/anaconda3/envs/dlab/lib/python3.6/site-packages/nltk/corpus/reader/wordnet.py", line 1342, in synset_from_pos_and_offset
assert synset._offset == offset这方面还有其他问题:
第一个链接问题的解决方案是在程序分支到单个线程之前加载该语料库。我已经这样做了:wordnet.ensure_loaded()是在多线程之前调用的。
GitHub问题中的建议是在我的线程函数中导入wordnet。但这改变不了什么。
发布于 2018-11-18 10:26:04
解决办法是为每一个线程制作一个深层次的语料库。当然,这需要大量的内存,而且效率不高:
import copy
from nltk.corpus import wordnet as wn
wn.ensure_loaded()
# at the beginning of the multi-threaded environment
my_wn = copy.deepcopy(wn)https://stackoverflow.com/questions/53321925
复制相似问题