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