[pypy-issue] [issue1484] numpy pickling

mikefc tracker at bugs.pypy.org
Tue May 14 04:41:34 CEST 2013


mikefc <coolbutuseless at gmail.com> added the comment:

Theres a weird bug with pickling and numpy operations. New code and output attached.

#========================================================
# Code
#========================================================
import sys
try:
        import numpypy as np
except:
        import numpy as np
import multiprocessing

def f1(x): pass
def f2(x): return 1
def f3(x): return x
def f4(x): return x + 1
def f5(x): return np.sum(x)

a = [np.zeros(3) for _ in xrange(4)]

# All five functions work with the builtin map
# but a multiprocessing map (which has to pickle objects) fails on f5
for map in (map, multiprocessing.Pool(2).map):
    print "f1:", map(f1, a); sys.stdout.flush()
    print "f2:", map(f2, a); sys.stdout.flush()
    print "f3:", map(f3, a); sys.stdout.flush()
    print "f4:", map(f4, a); sys.stdout.flush()
    print "f5:", map(f5, a); sys.stdout.flush() # FAILS with multiprocessing.map



#========================================================
# Output (trimmed. full output attached)
#========================================================
f1: [None, None, None, None]
f2: [1, 1, 1, 1]
f3: [array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.])]
f4: [array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.])]
f5: [0.0, 0.0, 0.0, 0.0]


f1: [None, None, None, None]
f2: [1, 1, 1, 1]
f3: [array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.])]
f4: [array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.])]
...

  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 600, in save_list
    self._batch_appends(iter(obj))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 636, in _batch_appends
    save(tmp[0])
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
TypeError: unsupported operand type for __getnewargs__: 'float64'

________________________________________
PyPy bug tracker <tracker at bugs.pypy.org>
<https://bugs.pypy.org/issue1484>
________________________________________
-------------- next part --------------
f1: [None, None, None, None]
f2: [1, 1, 1, 1]
f3: [array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.])]
f4: [array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.])]
f5: [0.0, 0.0, 0.0, 0.0]
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
f1: [None, None, None, None]
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
f2: [1, 1, 1, 1]
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
f3: [array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.]), array([ 0.,  0.,  0.])]
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
f4: [array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.]), array([ 1.,  1.,  1.])]
<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
Process PoolWorker-1:
Traceback (most recent call last):
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 258, in _bootstrap
Process PoolWorker-2:
Traceback (most recent call last):
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/pool.py", line 99, in worker
    self.run()
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/pool.py", line 99, in worker
    put((job, i, result))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/queues.py", line 390, in put
    put((job, i, result))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/queues.py", line 390, in put
    return send(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 1417, in dumps
    return send(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 1417, in dumps
    Pickler(file, protocol).dump(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 224, in dump
    Pickler(file, protocol).dump(obj)
    self.save(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 224, in dump
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
    self.save(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    save(element)
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 600, in save_list
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    self._batch_appends(iter(obj))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 636, in _batch_appends
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    save(tmp[0])
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 306, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 600, in save_list
    rv = reduce(self.proto)
    self._batch_appends(iter(obj))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 636, in _batch_appends
TypeError: unsupported operand type for __getnewargs__: 'float64'
    save(tmp[0])
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
TypeError: unsupported operand type for __getnewargs__: 'float64'
f5:<Float64 object at 0x101755110>
<Float64 object at 0x101755110>
Process PoolWorker-3:
Traceback (most recent call last):
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 258, in _bootstrap
Process PoolWorker-4:
    self.run()
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 114, in run
Traceback (most recent call last):
    self._target(*self._args, **self._kwargs)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/pool.py", line 99, in worker
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 258, in _bootstrap
    put((job, i, result))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/queues.py", line 390, in put
    self.run()
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/pool.py", line 99, in worker
    return send(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 1417, in dumps
    put((job, i, result))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/multiprocessing/queues.py", line 390, in put
    return send(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 1417, in dumps
    Pickler(file, protocol).dump(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 224, in dump
    self.save(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 600, in save_list
    self._batch_appends(iter(obj))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 636, in _batch_appends
    Pickler(file, protocol).dump(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 224, in dump
    save(tmp[0])
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 306, in save
    self.save(obj)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    rv = reduce(self.proto)
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
TypeError: unsupported operand type for __getnewargs__: 'float64'
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 548, in save_tuple
    save(element)
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 286, in save
    f(self, obj) # Call unbound method with explicit self
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 600, in save_list
    self._batch_appends(iter(obj))
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 636, in _batch_appends
    save(tmp[0])
  File "/Users/mike/python/pypy-latest/lib-python/2.7/pickle.py", line 306, in save
    rv = reduce(self.proto)
TypeError: unsupported operand type for __getnewargs__: 'float64'


More information about the pypy-issue mailing list