0

我正在尝试并行化一系列使用bigfloat. 但是,有错误

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

我 MWE 重现错误是

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,那么一切都很好。multiprocessing所以,肯定是和之间的某种交互bigfloat

所以,我想这multiprocessing在保存 BigFloat 对象时遇到了麻烦。我似乎无法仅“提取” BigFloat 抛出的值。我该如何解决这个问题?

4

1 回答 1

1

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

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

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

否则,您可以编写一些代码来支持这一点并将其提交给项目

于 2020-05-15T11:16:13.347 回答