multiprocessing problem: queue.get() not finding pushed values

Chris Angelico rosuav at
Wed Jul 16 06:26:41 CEST 2014

On Wed, Jul 16, 2014 at 6:32 AM, Charles Hixson
<charleshixsn at> wrote:
> from queue import Empty, Full

Not sure what this is for, you never use those names (and I don't have
a 'queue' module to import from). Dropped that line. In any case, I
don't think it's your problem...

> if __name__ == "__main__":
>     dbw    =    DBW(DBW_to, DBW_from)
>     DBW_to.put(Msg("a", 1, wrd) )
>     DBW_to.put(Msg("b", 2, wrd) )
>     DBW_to.put(Msg("c", 0, None) )

... which is here. You're not starting a subprocess; you're simply
calling a method, so it runs synchronously. When you call .run(), it
runs the "subprocess" to completion, which then bombs because the
queue's empty, and then never gets to putting anything onto it. Change
that .run() to .start() and it'll do as you expect, except that as
part of cutting the example down you seem to have omitted the
definition of wrd. I changed that to a quoted string and it works:

# chomp unchanged code ...
if __name__ == "__main__":
    dbw    =    DBW(DBW_to, DBW_from)
    DBW_to.put(Msg("a", 1, 'wrd') )
    DBW_to.put(Msg("b", 2, 'wrd') )
    DBW_to.put(Msg("c", 0, None) )

rosuav at sikorsky:~$ python
msg = Msg(act='a', id=1, vals='wrd')

Hope that helps!


More information about the Python-list mailing list