首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python: BigFloat+Multiprocessing

Python: BigFloat+Multiprocessing
EN

Stack Overflow用户
提问于 2020-05-15 18:31:33
回答 1查看 51关注 0票数 0

我正在尝试并行化一系列使用bigfloat的计算。但是,有一个错误

Error sending result: '[BigFloat.exact('1.0000000', precision=20)]'. Reason: 'TypeError('self._value cannot be converted to a Python object for pickling')'

我要重现的错误是

代码语言:javascript
复制
from bigfloat import *
from multiprocessing import Pool

def f(x,a,b,N):
    with precision(20):
        X=BigFloat(x)
        for i in range(N):
            X = a*X*X-b
        return X

if __name__ == '__main__':
    pool = Pool(processes=2)
    out1,out2 = pool.starmap(f,[(1,2,1,3),(2,2,2,2)])

(函数本身并不重要)。如果我不使用bigfloat,那么一切都很好。因此,这绝对是multiprocessingbigfloat之间的某种交互。

所以,我想multiprocessing在保存BigFloat对象时遇到了问题。我似乎不能只“提取”BigFloat抛出的值。如何解决此问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-15 19:16:13

显然,bigfloat不支持酸洗,我在执行pickle.dumps(BigFloat(1))时得到了同样的错误

https://github.com/mdickinson/bigfloat/issues/106指出,这是需要完成的

作为一种解决办法,为什么不在进程之间传输时直接转换为字符串呢?例如,将f更改为return str(X),然后让其他例程根据需要将字符串解析为BigFloat

否则,您可以编写一些代码来支持此功能,并将其提交到项目

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61817127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档