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

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


On Wed, Jul 16, 2014 at 6:32 AM, Charles Hixson
<charleshixsn at earthlink.net> 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.run()
>     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.start()
    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 test7a.py
msg = Msg(act='a', id=1, vals='wrd')

Hope that helps!

ChrisA



More information about the Python-list mailing list