Commit 81e0975b by Wenzel Jakob

clarified pickle version requirements (fixes #186)

parent 8edfa0c1
...@@ -1340,13 +1340,15 @@ An instance can now be pickled as follows: ...@@ -1340,13 +1340,15 @@ An instance can now be pickled as follows:
p = Pickleable("test_value") p = Pickleable("test_value")
p.setExtra(15) p.setExtra(15)
data = pickle.dumps(p, -1) data = pickle.dumps(p, 2)
Note that only the cPickle module is supported on Python 2.7. It is also Note that only the cPickle module is supported on Python 2.7. The second
important to request usage of the highest protocol version using the ``-1`` argument to ``dumps`` is also crucial: it selects the pickle protocol version
argument to ``dumps``. Failure to follow these two steps will lead to important 2, since the older version 1 is not supported. Newer versions are also fine—for
pybind11 memory allocation routines to be skipped during unpickling, which will instance, specify ``-1`` to always use the latest available version. Beware:
likely cause memory corruption and/or segmentation faults. failure to follow these instructions will cause important pybind11 memory
allocation routines to be skipped during unpickling, which will likely lead to
memory corruption and/or segmentation faults.
.. seealso:: .. seealso::
......
...@@ -14,7 +14,7 @@ p = Pickleable("test_value") ...@@ -14,7 +14,7 @@ p = Pickleable("test_value")
p.setExtra1(15) p.setExtra1(15)
p.setExtra2(48) p.setExtra2(48)
data = pickle.dumps(p, -1) # -1 is important (use highest protocol version) data = pickle.dumps(p, 2) # Must use pickle protocol >= 2
print("%s %i %i" % (p.value(), p.extra1(), p.extra2())) print("%s %i %i" % (p.value(), p.extra1(), p.extra2()))
p2 = pickle.loads(data) p2 = pickle.loads(data)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment