1. Jan-Philip Gehrcke
  2. gipc

Source

gipc / README

What can gipc do for you?
=========================

Naive usage of ``multiprocessing`` in the context of a ``gevent``-powered
application may raise various problems and most likely breaks the application in
some way. That is where ``gipc`` comes into play: it is developed with the
motivation to solve these issues transparently and make using ``gevent`` in
combination with ``multiprocessing`` a no-brainer again.

**With gipc (pronunciation "gipsy") multiprocessing.Process-based child
processes can safely be created anywhere within your gevent-powered application.
Furthermore, gipc provides gevent-cooperative inter-process communication and
useful helper constructs.**

``gipc`` is lightweight and very simple to integrate. In the following code
snippet, a Python object is sent from a greenlet in the main process to a child
process::

    import gevent
    import gipc

    obj = 0

    def child(reader):
        assert reader.get() == obj

    if __name__ == "__main__":
        with gipc.pipe() as (reader, writer):
            writelet = gevent.spawn(lambda w: w.put(obj), writer)
            readchild = gipc.start_process(child, args=(reader,))
            writelet.join()
            readchild.join()


Can't I do this with just gevent+multiprocessing?
-------------------------------------------------

It requires care: child process creation via ``multiprocessing`` in the context
of ``gevent`` yields an undesired event loop state in the child. Greenlets
spawned before forking are duplicated in the child. Furthermore, blocking method
calls such as ``join()`` on a ``multiprocessing.Process`` or the
``send()``/``recv()`` methods on a ``multiprocessing.Connection`` are not
gevent-cooperative. ``gipc`` overcomes these challenges for you transparently
and in a straight-forward fashion. It allows for simple integration of child
processes in your application -- on POSIX-compliant systems as well as on
Windows.

Documentation
=============
The documentation with technical notes, API details, installation instructions,
requirements, and code examples can be found at http://gehrcke.de/gipc.


Availability
============
Releases are available at `PyPI <http://pypi.python.org/pypi/gipc>`_.
The development version can be received from the mercurial repository at
`bitbucket <https://bitbucket.org/jgehrcke/gipc>`_.


Author & license
================
``gipc`` is written and maintained by `Jan-Philip Gehrcke <http://gehrcke.de>`_
and is licensed under the 
`Apache License 2.0 <http://www.apache.org/licenses/LICENSE-2.0.txt>`_.


Contact
=======
Your feedback is highly appreciated. You can contact me at
jgehrcke@googlemail.com or use the
`Bitbucket issue tracker <https://bitbucket.org/jgehrcke/gipc/issues>`_.