ZeroMQ between processes is fast, easy to use.
Within one process with many threads, CSP (communicating sequential processes) works very well. They're built-in to the Go language and it's a library for Clojure.
I imagine someone has built the same type of thing for Python. In searching, you may see a reference to "channels" which can either block or buffer. It's like conveyor belt sharing among multiple threads: the threads putting info on "the belt" just do it and leave, doesn't have to care about "who" picks it off.
nooby, you've inspired me to build out my own trading software. My target language is a Lisp though. Racket (scheme) has a nice programming IDE (DrRacket), GUI library, great support group, documentation and can run on Windows, Linux and Mac OS. It's very fun to program in. I can always port it to Clojure or Common Lisp down the road if I need to.
I never had "fun" programming in Python. For me, after programming in C/C++/Java/C# for years on end, the return to a Lisp language has become pure enjoyment.