Ending data exchange through multiprocessing pipe
MRAB
google at mrabarnett.plus.com
Thu Apr 23 08:09:10 EDT 2009
Michal Chruszcz wrote:
> On Apr 22, 6:33 pm, MRAB <goo... at mrabarnett.plus.com> wrote:
>> You could do this:
>>
>> from multiprocessing.queues import Empty
>>
>> queue = Queue()
>> Process(target=f, args=(queue,)).start()
>> while active_children():
>> try:
>> print queue.get(timeout=1)
>> except Empty:
>> pass
>
> This one isn't generic. When I have tasks that all finish within 0.1
> seconds the above gives 10x overhead. On the other hand, if I know the
> results will be available after 10 hours there's no use in checking
> every second.
>
If there is a result in the queue then it will return immediately; if
not, then it will wait for up to 1 second for a result to arrive, but if
none arrives in that time then it will raise an Empty exception. Raising
only 1 exception every second won't consume a negligible amount of
processing power (I wouldn't worry about it).
More information about the Python-list
mailing list