If the question is about "whether Process creation + Queue.put() pair" is FIFO, see the answer by @ozymandias. In short - nobody have said that your Processes have to finish processing and push things to Queue in the same order as the Processes were created.
However, if the question is about multiprocessing.Queue itself being FIFO (in other words, about "whether messages put() into Queue will appear in the same order when get()ting them"), the answer gets much more interesting. From my own research (combination of testing, docs, multiprocessing source code, and whatsnot) - the picture looks as follows:
- multiprocessing.Queue is FIFO with respect to different messages from the same Process.
- multiprocessing.Queue may reorder messages coming from different Processes. This is done to improve performance a bit (moving pickling to a separate Thread within the same Process where Queue.put() was called; in documentation, they refer to it as to "background thread"), and if you're not using any other communication/synchronization means to synchronize your Processes besides Queue itself - you won't be able to notice the difference. However, if you have some other synchronization between your Processes - this may become observable and may start causing trouble.
- multiprocessing.SimpleQueue seems to be strictly FIFO even between different producers.
- SyncManager (returned by Manager() call) uses shared queue.Queue, which doesn't have background thread, so it also seems to guarantee strict FIFO ordering even between different producers. This explains the effect observed by @raizinnz .