Jaidev Deshpande wrote:

1. I can either compile the C code into a module using the Python-C/C++
API, through which I can simple 'import' the required function.
2. I can use the Python code and extend it using Cython.

Which will give me a better performance?

The only way to be sure is to do both, measure the speed of each, and compare. But in *principle* hand-written C may be faster, but in *practice* Cython is likely to be as fast and possibly faster. It's certainly easier: you can afford to try Cython and only bother with the pure C code if you actually need it.

A more interesting question is "which will give you sufficiently fast performance for the least development time?"

Some further options:

3. Just write it in pure Python, and don't worry about speeding it up unless you actually need to. Unless you have actually *measured* the time taken, how do you know which (if any) bits are too slow? Perhaps it is already fast enough, and making it faster just throws away developer time for no benefit.

If the cubic spline interpolation is too slow, you still have additional options:

4. If you only need to support Python 2 on 32-bit platforms, use the Psyco JIT compiler to speed it up. This only works on the standard CPython version (not to be confused with Cython), not IronPython or Jython compilers.

5. Use PyPy, which is an optimizing compiler for Python. This is likely to be ten times as fast as CPython. PyPy is fast enough to do some video processing tasks in real-time, so it likely will be fast enough for cubic splines.

http://morepypy.blogspot.com/2011/07/realtime-image-processing-in-python.html

6. Extend the Python code with Cython, and see if that is sufficiently fast enough for your needs.

7. And finally, if the Cython code is too slow, re-write in C by hand.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to