Below is some pretty simple code and the resulting output.<br>Sometimes the code runs through but sometimes it just freezes for no apparent reason.<br>The output pasted is where it just got frozen on me.<br>It called start() on the 2nd worker but the 2nd worker never seemed to enter the run method.<br>
<br>################### the code<br>
<br>#!/usr/bin/env python<br><br>import sys<br>import Queue<br>import multiprocessing<br>import time<br>todo = multiprocessing.Queue()<br><br>for i in xrange(100):<br>    todo.put((i, i+1, i+2))<br><br>def FOO(a, b, c):<br>
    print 'foo', a, b, c<br>    return (a + b) * c<br><br>class MyWorker(multiprocessing.Process):<br>    def __init__(self, inbox, outbox):<br>        super(MyWorker, self).__init__()<br>        self.inbox = inbox<br>
        self.outbox = outbox<br>        print >> sys.stderr, '1' * 80; sys.stderr.flush()<br>    def run(self):<br>        print >> sys.stderr, '2' * 80; sys.stderr.flush()<br>        while True:<br>
            try:<br>                args = self.inbox.get_nowait()<br>            except Queue.Empty:<br>                break<br>            self.outbox.put(FOO(*args))<br><br>print >> sys.stderr, 'a' * 80; sys.stderr.flush()<br>
result_queue = multiprocessing.Queue()<br><br>print >> sys.stderr, 'b' * 80; sys.stderr.flush()<br>w1 = MyWorker(todo, result_queue)<br>print >> sys.stderr, 'c' * 80; sys.stderr.flush()<br>w2 = MyWorker(todo, result_queue)<br>
<br>print >> sys.stderr, 'd' * 80; sys.stderr.flush()<br>w1.start()<br>print >> sys.stderr, 'e' * 80; sys.stderr.flush()<br>w2.start()<br>print >> sys.stderr, 'f' * 80; sys.stderr.flush()<br>
<br>for i in xrange(100):<br>    print result_queue.get()<br><br><br><br>################### the output<br><br>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb<br>
11111111111111111111111111111111111111111111111111111111111111111111111111111111<br>cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc<br>11111111111111111111111111111111111111111111111111111111111111111111111111111111<br>
dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd<br>eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee<br>22222222222222222222222222222222222222222222222222222222222222222222222222222222<br>
foo 0 1 2<br>foo 1 2 3<br>foo 2 3 4<br>foo 3 4 5<br>foo 4 5 6<br>22222222222222222222222222222222222222222222222222222222222222222222222222222222<br>ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff<br>
2<br>9<br>20<br>35<br>54<br><br>