Hello Together,

Shortly what I'm  doing:
- Extending python with boost.pthon extension
- Using python C-Api for datatypes in the extension
- extension has a thread (that can be stopped/started)
- thread started: extension updates a dict (given as parameter to the 
extension) 
every 20 ms
- the dict looks like:
{int:{int:[float,float,float] int:[float,float,float], ...}}

Now my question:
I create the dict every 20 ms on the heap in the following way:
------------------------------
static PyObject*  createPTDict()
{
        static int aNumIter = 0;

        PyObject* nRetDictPy =  PyDict_New(); // dicto to return
        PyObject* nToolIdPy = PyInt_FromLong(1234567);
        PyObject* nLedDict =  PyDict_New(); // dict containing 5 key,values
                
        for (int aLedNum=0; aLedNum < 5; aLedNum++)
        {
                PyObject* aLedNumPy = PyInt_FromLong(aLedNum);
                PyObject* aLedList = PyList_New(0);
                for ( int aXYZ=0; aXYZ < 3; aXYZ++)
                {
                        PyObject* aLedPosXYZ = PyFloat_FromDouble(1.0);
                        PyList_Append(aLedList, aLedPosXYZ);
                }
                PyDict_SetItem(nLedDict, aLedNumPy, aLedList);
        }
        PyDict_SetItem(nRetDictPy, nToolIdPy, nLedDict);
        aNumIter ++;
        return nRetDictPy;
}
------------------------------
I give it to python with:
------------------------------
PyObject *aKey, *aValue;
int aPos = 0;
PyObject* aNewToolDict = createPTDict();
PyDict_Next(aNewToolDict, &aPos, &aKey, &aValue);

// DictInPython passed prior to extension
PyDict_SetItem(<DictInPython>, aKey, aValue);
------------------------------
And now, what would be a proper way to cleanup the heap?
1) Does PyDict_Clear(aNewToolDict) also decrement the ref counting for the 
containing list, int, ... PyObjects?
2) Do I need to Py_CLEAR( PyObject *o) for every created PyObject?

Thanks a lot for every answer/hint.

Regards
Alexander
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to