[IPython-dev] waiting for a executeAll( ..., block=False) to finish

Brian Granger ellisonbg.net at gmail.com
Wed Aug 29 15:41:52 EDT 2007


Yep,

This page:

http://ipython.scipy.org/moin/Parallel_Computing/SawTutorial

Has a section on non-blocking execution that has the details.  Here is
the short story though.

When execute is called with block =False, it returns a PendingResult object:

[15]: pr = rc.executeAll('time.sleep(5)',block=False)

This object has a getResult method that can called at a later moment
in time to get the results.  By default PendingResult.getResult will
block, but it too can be made to not-block (which allows you to poll
for a result) by doing PendingResult.getResult(block=False).  So the
following works:

In [16]: pr.getResult()                                     # now
block for the result
Out[16]:
<Results List>
[0] In [6]: time.sleep(5)
[1] In [4]: time.sleep(5)
[2] In [6]: time.sleep(5)
[3] In [6]: time.sleep(5)

If the call to execute raised an exception, calling getResult will
raise the exception at that point.

Also, it is worth noting that most methods of RemoteController have
this behavior.  The blocking behavior of all methods can be controlled
by setting rc.block = False.  Then all methods (push, pull, execute,
scatter, gather) will return PendingResults objects.

Hope this helps

Brian


On 8/29/07, Glen W. Mabey <Glen.Mabey at swri.org> wrote:
> Hello,
>
> After having called executeAll() with block=False, is there some way to
> wait for it to have completed on all engines?
>
> Thanks,
> Glen
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://lists.ipython.scipy.org/mailman/listinfo/ipython-dev
>



More information about the IPython-dev mailing list