Search code examples
pythonipcinterprocess

Receiving messages via python while doing other work


I have a python script A and a python script B.

Both of them are running independently. I want, as soon as script B finishes execution, it should send a message to script A, "B Done".

A simple message could have been sent by sockets et al. However, script A is doing some work of its own. How do I make A listen for B without halting the execution of A?

Any help is much appreciated!

EDIT:

B is entirely CPU bound - calculations. A is a mix of I/O bound and CPU-bound. The user is intervening at irregular intervals with inputs (keylogger like setup) where I/O is obviously the keystrokes, and CPU bound task is some calculations being performed on the entered key.


Solution

  • There are many solutions to this area of problem.

    You might want to checkout ZMQ which makes it easy to create a messaging pattern between applications.

    The message channel would run in its own thread, which might be a "green" thread to avoid unnecessary overhead if used together with gevent.

    A few examples combining gevent and zmq: https://github.com/zeromq/pyzmq/tree/master/examples/gevent
    A great guide for different messaging patterns: ZMQ Guide

    Use these libraries to create a channel between A and B which continuously polls for new work and reports the results back.

    Some other solutions exist where you have a broker in between A and B, but setting up the link between the nodes directly would probably be more suitable for an interactive-ish application like the one you are describing.