Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #53811
| From | Piet van Oostrum <piet@vanoostrum.org> |
|---|---|
| Newsgroups | comp.lang.python |
| Subject | Re: Multiprocessing / threading confusion |
| Date | 2013-09-06 17:15 -0400 |
| Message-ID | <m2sixhps6r.fsf@cochabamba.vanoostrum.org> (permalink) |
| References | <ca7ea9d1-4dad-4a30-97b2-ad8536a1860b@googlegroups.com> <eaa938b9-518a-4c79-a252-a60cab696383@googlegroups.com> |
Paul Pittlerson <menkomigen6@gmail.com> writes:
[...]
> def run(self):
> while True:
>
> sleep(0.1)
>
> if not self.q.empty():
> print self.q.get()
>
> else:
> break
[...]
> This works great on linux, but does not run on windows (7). The behavior was: I
> opened it with double clicking and so a window appeared and disappeared (no
> text) then I opened it with IDLE and ran it there, where it worked a couple
> times. Then reopened it with IDLE and this time it did not work at all. After
> that the script did not run either through IDLE or opening directly.
>
> What may be the reason it works on linux, but seems buggy on windows?
That it works on Linux is just coincidence. Your script is still timing
dependent because the while loop in Debug.run stops when the queue is
empty. As has been explained in other answers, the queue can just become
empty when Debug empties it faster than the other processes can fill it.
That is entirely dependent on the scheduling of the O.S. so you have no
control over it. You must use a safe way to stop, for example to count
the exited messages.
Another way is to join all the processes in the main program, and after
that put a special END message to the queue, which causes Debug to stop:
class Debugger(Thread):
...
def run(self):
while True:
sleep(0.1)
msg = self.q.get()
print(msg)
if 'END' in msg:
break
..main..
processes = []
for i in range(5):
d = Process(target=Worker, args=(debug_q,))
d.start()
processes.append(d)
for p in processes:
p.join()
debug_q.put('END')
--
Piet van Oostrum <piet@vanoostrum.org>
WWW: http://pietvanoostrum.com/
PGP key: [8DAE142BE17999C4]
Back to comp.lang.python | Previous | Next — Previous in thread | Find similar | Unroll thread
Multiprocessing / threading confusion Paul Pittlerson <menkomigen6@gmail.com> - 2013-09-05 12:27 -0700
Re: Multiprocessing / threading confusion "marduk@python.net" <marduk@python.net> - 2013-09-05 18:28 -0400
Re: Multiprocessing / threading confusion Paul Pittlerson <menkomigen6@gmail.com> - 2013-09-05 16:34 -0700
Re: Multiprocessing / threading confusion Chris Angelico <rosuav@gmail.com> - 2013-09-06 13:00 +1000
Re: Multiprocessing / threading confusion Chris Angelico <rosuav@gmail.com> - 2013-09-06 08:46 +1000
Re: Multiprocessing / threading confusion Paul Pittlerson <menkomigen6@gmail.com> - 2013-09-05 17:03 -0700
Re: Multiprocessing / threading confusion Piet van Oostrum <piet@vanoostrum.org> - 2013-09-05 23:54 -0400
Re: Multiprocessing / threading confusion Piet van Oostrum <piet@vanoostrum.org> - 2013-09-06 00:28 -0400
Re: Multiprocessing / threading confusion Paul Pittlerson <menkomigen6@gmail.com> - 2013-09-06 11:27 -0700
Re: Multiprocessing / threading confusion Skip Montanaro <skip@pobox.com> - 2013-09-06 13:53 -0500
Re: Multiprocessing / threading confusion Dave Angel <davea@davea.name> - 2013-09-06 20:34 +0000
Re: Multiprocessing / threading confusion Piet van Oostrum <piet@vanoostrum.org> - 2013-09-06 17:15 -0400
csiph-web