Book Image

Learning Cython Programming

By : Philip Herron
Book Image

Learning Cython Programming

By: Philip Herron

Overview of this book

<p>Cython is a very powerful combination of Python and C. Using Cython, you can write Python code that calls back and forth from and to C or C++ code natively at any point. It is a language with extra syntax allowing for optional static type declarations. It is also a very popular language as it can be used for multicore programming.</p> <p>Learning Cython Programming will provide you with a detailed guide to extending your native applications in pure Python; imagine embedding a twisted web server into your native application with pure Python code. You will also learn how to get your new applications up and running by reusing Python’s extensive libraries such as Logging and Config Parser to name a few.</p> <p>With Learning Cython Programming, you will learn that writing your own Python module in C from scratch is not only hard, but is also unsafe. Cython will automatically handle all type-conversion issues as well as garbage collection on your code. You can also still write all your code in Python but have it compiled and called directly in C as if it was just another function or data.</p> <p>This book also demonstrates how you can take the open source project Tmux and extend it to add new commands directly in pure Python. With this book, you will learn everything you need to know to get up and running with Cython and how you can reuse examples in a practical way.</p>
Table of Contents (13 chapters)

Embedding Python


Now that we have files being compiled, we need to initialize Python and our module. Tmux is a forked server that clients connect to, so try not to think of it as a single-threaded system. It's a client and a server, so all commands are executed on the server. Now let's find where the event loop is started in the server and initialize and finalize the server here so that it's done correctly. Looking at int server_start(int lockfd, char *lockfile), we can add in the following:

#ifdef HAVE_PYTHON
  Py_InitializeEx (0);
#endif
  server_loop();
#ifdef HAVE_PYTHON
  Py_Finalize ();
#endif

Python is now embedded into the Tmux server. Notice that instead of simply Py_Initialize, I used Py_InitializeEx (0). This replicates the same behavior but doesn't start up normal Python signal handlers. Tmux has its own signal handlers, so I don't want to override them. It's probably a good idea when extending established applications such as this to use Py_InitializeEx (0) since they generally...