Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #74537

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

Date 2014-07-15 22:47 -0700
From Charles Hixson <charleshixsn@earthlink.net>
Subject Re: multiprocessing problem: queue.get() not finding pushed values
References <53C58FC8.2030202@earthlink.net> <CAPTjJmoU2qbeMamfHeSkWRrqm3Z-u0fxdcP1O-vp-zZCawkZKQ@mail.gmail.com>
Newsgroups comp.lang.python
Message-ID <mailman.11866.1405493954.18130.python-list@python.org> (permalink)

Show all headers | View raw


[Multipart message — attachments visible in raw view] - view raw

On 07/15/2014 09:26 PM, Chris Angelico wrote:
> On Wed, Jul 16, 2014 at 6:32 AM, Charles Hixson
> <charleshixsn@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@sikorsky:~$ python test7a.py
> msg = Msg(act='a', id=1, vals='wrd')
>
> Hope that helps!
>
> ChrisA
Thank you.  I had forgotten that one wasn't supposed to call run directly.
FWIW, I import Empty and Full because the multiprocessor documentations 
says in


      17.2.2.2. Pipes and Queues

Note

multiprocessing <cid:part1.05080901.05000005@earthlink.net> uses the 
usual queue.Empty <cid:part2.06060100.00020506@earthlink.net> and 
queue.Full <cid:part3.01060608.01040702@earthlink.net> exceptions to 
signal a timeout. They are not available in the multiprocessing 
<cid:part1.05080901.05000005@earthlink.net> namespace so you need to 
import them from queue <cid:part5.09090108.07050309@earthlink.net>.

They aren't used in the stripped down test, but they are used in the 
real code

Back to comp.lang.python | Previous | Next | Find similar | Unroll thread


Thread

Re: multiprocessing problem: queue.get() not finding pushed values Charles Hixson <charleshixsn@earthlink.net> - 2014-07-15 22:47 -0700

csiph-web