Re: how avoid delay while returning from C-python api?
Yes, Cython looks easier but the problem its a very old code ( 6 or 7 years ). Almost entire code base uses plain python-c api. Thanks for the example, will use Cython or Ctypes way for side-projects! Cheers, Lakshmipathi.G FOSS Programmer. www.giis.co.in/readme.html -- https://mail.python.org/mailman/listinfo/python-list
Re: how avoid delay while returning from C-python api?
On 5/28/14 6:22 AM, Lakshmipathi.G wrote: Hi - I have C-Python api like below. It works fine, but the problem is while invoking this method from python script say #cat script.py snip offset=0 size=4 write_object(offset,size) /snip This calls write_this_c() C api and returns quickly to next printf statement. But the return call (Py_RETURN_NONE) takes something like 4-6 seconds. - static PyMethodDef xyz_methods[] = { {write_object, write_object, METH_VARARGS,write some stuff }, {NULL, NULL, 0, NULL} }; static PyObject * write_object(PyObject *self, PyObject *args) { int offset, size; if (!PyArg_ParseTuple(args,ii, offset, size)) Py_RETURN_NONE; printf(before call); write_this_c(offset, size); printf(after call); Py_RETURN_NONE; ##delay happens here } How to avoid this delay time? Thanks for any help/pointers! It can't be as simple as the Py_RETURN_NONE taking 4-6 seconds: hundreds of built-in functions in Python are coded exactly this way, and they don't have a delay on return. Something else is going on. How did you determine that it was the return that was taking the time? Cheers, Lakshmipathi.G FOSS Programmer. www.giis.co.in -- Ned Batchelder, http://nedbatchelder.com -- https://mail.python.org/mailman/listinfo/python-list
Re: how avoid delay while returning from C-python api?
The statement after call printed to stdout and the script waits there for few seconds. So I was assuming something delaying the return value. Just found out there is core-dump segmentation fault (core dumped) python ..Probably fixing core dump should resolve the issue. Thanks! Cheers, Lakshmipathi.G FOSS Programmer. www.giis.co.in -- https://mail.python.org/mailman/listinfo/python-list
Re: how avoid delay while returning from C-python api?
Lakshmipathi.G, 28.05.2014 12:22: I have C-Python api like below. It works fine, but the problem is while invoking this method from python script say #cat script.py snip offset=0 size=4 write_object(offset,size) /snip This calls write_this_c() C api and returns quickly to next printf statement. But the return call (Py_RETURN_NONE) takes something like 4-6 seconds. - static PyMethodDef xyz_methods[] = { {write_object, write_object, METH_VARARGS,write some stuff }, {NULL, NULL, 0, NULL} }; static PyObject * write_object(PyObject *self, PyObject *args) { int offset, size; if (!PyArg_ParseTuple(args,ii, offset, size)) Py_RETURN_NONE; printf(before call); write_this_c(offset, size); printf(after call); Py_RETURN_NONE; ##delay happens here } How to avoid this delay time? Thanks for any help/pointers! You already found the problem yourself, so let me just give you a general advice that you can avoid a lot of the hassle of writing code like the above and struggling to get it right by writing it in Cython instead of plain C. Here's a complete example of the above code in Cython, including the module setup code etc., but without the bugs: # external declarations: cdef extern from someheader.h: void write_this_c(int offset, int size) # your module function: def write_object(int offset, int size): write some stuff print(before call) write_this_c(offset, size) print(after call) That's it. Stefan -- https://mail.python.org/mailman/listinfo/python-list