We have a system which uses Python multiprocessing to run multiple simulations 
concurrently in child processes, with main server <-> child process 
communication using multiprocessing.  This works fine standalone.

For a GUI, we use zeromq and tornado for communications between the main server 
and the browser.  This also works fine as long as the main server never starts 
a child process using multiprocessing.

If we do start a child process, we get an assertion failure:

    Assertion failed: ok (bundled/zeromq/src/mailbox.cpp:79)

and the main server aborts (this is on Linux, Windows seems OK, probably 
because multiprocessing doesn't fork on Windows)

This is using Python 2.7 and pyzmq 13.1.0.  Is there some way to run a server 
that uses zmq and also forks child processes using multiprocessing?  I've seen 
some posts about forked child processes needing to context.term() and then 
creating a new context. I tried context.term() in the target of the 
multiprocess.Process, but that hasn't fixed the problem.  Note that the child 
processes do not need zmq, so I don't create a new context.

zeromq-dev mailing list

Reply via email to