Python経由でC++コードを実行していて、拡張タイプを選択したいと思います。
したがって、Pythonタイプのオブジェクト(t_db_manager)でラップしたデータベースオブジェクトとオブジェクトマネージャーオブジェクト(どちらもC ++で記述)へのポインターを含むC ++構造(py_db_manager)があります。私の問題は、このpythonタイプは、いくつかの子マルチコアプロセスに送信するために、2つのポインターをピクルスにする方法を知っている必要があるということです。そこで、型をcopy_regモジュールに登録しました(これは、型にreduce()メソッドを記述することと同じです。ただし、何を入れるかがよくわかりません。PyObject*を使用してタプルを作成する必要があります。整数ポインタ?。誰か助けてもらえますか?
typedef struct
{
PyObject_HEAD
PyObject* man_inst_ ;
PyObject* db_inst_ ;
}py_db_manager;`
これがPy_TypeObjectです
PyTypeObject t_db_manager = {
PyObject_HEAD_INIT(0) /* tp_head */
0, /* tp_internal */
".py_db_manager", /* tp_name */
sizeof(py_db_manager)};
そして、 reduceメソッドに含まれるコードは次のとおりです。
PyObject *pickle_manager(PyObject *module, PyObject *args)
{
py_db_manager *cpp_manager =0;
PyObject *values = NULL,
*tuple = NULL;
char text[512];
if (!PyArg_ParseTuple(args, "O!", &t_db_manager, &cpp_manager))
goto error;
sprintf(text,"man_inst_, db_inst_");
if ((values = Py_BuildValue("(sii)", text,
cpp_manager->man_inst_, cpp_manager->db_inst_)) == NULL)
goto error;
tuple = Py_BuildValue("(OO)", manager_constructor, values);
error:
Py_XDECREF(values);
return tuple;
}