Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #74537
| 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) |
[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
Re: multiprocessing problem: queue.get() not finding pushed values Charles Hixson <charleshixsn@earthlink.net> - 2014-07-15 22:47 -0700
csiph-web