Re: how avoid delay while returning from C-python api?

2014-05-30 Thread Lakshmipathi.G
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?

2014-05-28 Thread Ned Batchelder

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?

2014-05-28 Thread Lakshmipathi.G
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?

2014-05-28 Thread Stefan Behnel
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