我原来的问题是,我试图做到以下几点:无法使用setParseAction()方法腌制Pyparsing表达式。需要多处理
def submit_decoder_process(decoder, input_line):
decoder.process_line(input_line)
return decoder
self.pool = Pool(processes=num_of_processes)
self.pool.apply_async(submit_decoder_process, [decoder, input_line]).get()
解码器是有点麻烦来形容这里,但重要的是,解码器是与PyParsing表达初始化的对象它调用setParseAction()。这会妨碍多处理使用的pickle,而这又会导致上述代码失败。
现在,这里是pickle/PyParsing问题,我已经隔离和简化了。 由于pickle失败,以下代码会产生错误消息。
import pickle
from pyparsing import *
def my_pa_func():
pass
pickle.dumps(Word(nums).setParseAction(my_pa_func))
错误消息:
pickle.PicklingError: Can't pickle <function wrapper at 0x00000000026534A8>: it's not found as pyparsing.wrapper
现在如果删除通话.setParseAction(my_pa_func),将没有任何问题的工作:
pickle.dumps(Word(nums))
我怎样才能得到解决呢?多重处理使用泡菜,所以我不能避免它,我猜。据说使用莳萝的pathos软件包还不够成熟,至少,我在安装Windows-64bit时遇到问题。我真的在这里挠头。
~~ rant ~~:''pathos'已接近10岁......几乎整个时间都在积极发展(周期性地)。它通过'setuptools'安装。如果你使用'pre'标志,它可以用'pip'安装。我没有看到它不是一个“成熟”的软件包......除了最后一个稳定版本的版本号(除非版本号标准发生变化,否则*不是问题)。无论如何,感叹。由于版本编号,待发布的新版本将完全处理'pip'安装问题*。 –