Я пытаюсь написать расширения Python, используя pycxx (http://cxx.sourceforge.net/PyCXX-Python3.html).). Для эксперимента я выполнил шаги, изложенные в README . Однако я вижу, что методы, определенные в расширении на глобальном уровнеуровень не может быть изменен.
In [1]: import simple
In [2]: simple
Out[2]: <module 'simple' from '<pycxx_dir>/obj/simple.so'>
In [3]: pickle.dumps(simple.func)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-16-2284e569486f> in <module>
----> 1 pickle.dumps(simple.func)
TypeError: can't pickle PyCapsule objects
Это потому, что simple.func.__reduce__
возвращает кортеж, включающий объект PyCapsule
, который не может быть выбран.
In [1]: simple.func.__reduce__()
Out[1]:
(<function getattr>,
((<capsule object NULL at 0x7f8851d77cf0>,
<capsule object NULL at 0x7f8851d77450>),
'func'))
Я работаю над linux
машина с Python 3.7
.