BeautifulSoup对象不会腌制,导致解释器无声崩溃

Mic*_*ael 7 python beautifulsoup pickle

我有汤,BeautifulSoup因为我不能泡菜.当我尝试pickle对象时,python解释器静默崩溃(这样它就不能作为例外处理).我必须能够pickle对象,以便使用multiprocessing包返回对象(pickles对象在进程之间传递它们).我该如何解决/解决问题?不幸的是,我无法发布该页面的html(它不公开),我一直无法找到问题的可重现的例子.我试图通过循环汤和酸洗单个组件来隔离问题,产生错误的最小的东西是<class 'BeautifulSoup.NavigableString'>.当我打印对象时,它打印出来u'\n'.

Mik*_*rns 5

这个类NavigableString是不可序列与picklecPickle,其中multiprocessing使用.但是,您应该可以使用此序列化此类dill.dill有一个pickle接口的超集,并可以序列化大部分python. multiprocessing仍然会失败,除非您使用的一个分支multiprocessing,它使用dill,被称为pathos.multiprocessing.

获取代码:https://github.com/uqfoundation.


有关更多信息,请参阅: 多处理和莳萝可以一起做什么?

http://matthewrocklin.com/blog/work/2013/12/05/Parallelism-and-Serialization/

http://nbviewer.ipython.org/gist/minrk/5241793


Ser*_*sta 1

事实上,正如 dekomote 所建议的,您只需利用您始终可以将 soup 转换为 unicode 字符串,然后再将 unicode 字符串返回到 soup 的优势。

因此,恕我直言,您不应该尝试通过多处理包传递汤对象,而只需传递代表汤的字符串。