0

I am trying to parallelise a series of computations that use bigfloat. However, there is the error

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

I MWE to reproduce the error is

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)])

(the function itself is not important at all). If I do not use bigfloat, then everything is fine. So, it is definitely some sort of interaction between multiprocessing and bigfloat.

So, I imagine that multiprocessing is having troubles saving the BigFloat object. I do not seem to be able to "extract" only the value thrown by BigFloat. How can I resolve this issue?

PepeToro
  • 559
  • 4
  • 14

1 Answers1

1

apparently bigfloat doesn't support pickling, I get the same error when doing pickle.dumps(BigFloat(1))

https://github.com/mdickinson/bigfloat/issues/106 notes this as needing to be done

as a work around, why not just convert to strings when transferring between processes? i.e. change f to return str(X) and then have other routines parse the strings into BigFloats as needed

otherwise, you could write some code to support this and submit it to the project

Sam Mason
  • 15,216
  • 1
  • 41
  • 60