使用Brightway导入ecoinvent 3.5 cutoff时遇MaybeEncodingError报错求助
Fixing MaybeEncodingError When Importing ecoinvent 3.5 Cutoff with Brightway
你的推测完全正确——这个错误确实和多进程下的pickle序列化有关。Brightway默认启用多进程来加速ecospold2文件的提取,但lxml生成的lxml.etree._ListErrorLog对象没法被pickle序列化,进程间传递结果时就触发了这个报错。
最简单的解决办法:禁用多进程
直接在初始化SingleOutputEcospold2Importer时添加use_mp=False参数,强制用单进程处理文件,这样就不需要在进程间传递无法序列化的对象了。修改后的代码如下:
if 'ecoinvent 3.5 cutoff' not in databases: ei35cutofflink=r"H:\Data\ecoinvent 3.5_cutoff_lci_ecoSpold02\datasets" # 禁用多进程,规避pickle序列化问题 ei35cutoff=SingleOutputEcospold2Importer(ei35cutofflink, 'ecoinvent 3.5 cutoff', use_mp=False) ei35cutoff.apply_strategies() ei35cutoff.statistics() ei35cutoff.write_database()
补充说明
虽然单进程处理速度会慢一些,但能直接解决这个序列化问题。如果之后想尝试恢复多进程,可以先检查你的lxml版本是否有相关的序列化改进,或者确保XML解析过程中没有生成这类错误日志对象,但对于完成导入来说,禁用多进程是最直接有效的方案。
内容的提问来源于stack exchange,提问作者xiaoshir
相关产品推荐
相关产品推荐

