hi min,<br><br>this is great. a few things that might be useful to consider:<br><br>* optionally offload the dag directly to the underlying scheduler if it has dependency support (i.e., SGE, Torque/PBS, LSF)<br>* something we currently do in nipype is that we provide a configurable option to continue processing if a given node fails. we simply remove the dependencies of the node from further execution and generate a report at the end saying which nodes crashed.<br>
* callback support for node: node_started_cb, node_finished_cb<br>* support for nodes themselves being DAGs<br>* the concept of stash and pop for DAG nodes. i.e. a node which is a dag can stash itself while it's internal nodes execute and should not take up any engine.<br>
<br>also i was recently with some folks who have been using DRMAA (<a href="http://en.wikipedia.org/wiki/DRMAA">http://en.wikipedia.org/wiki/DRMAA</a>) as the underlying common layer for communicating with PBS, SGE, LSF, Condor. it might be worthwhile taking a look (if you already haven't) to see what sort of mechanisms might help you. a python binding is available at: <a href="http://code.google.com/p/drmaa-python/wiki/Tutorial">http://code.google.com/p/drmaa-python/wiki/Tutorial</a><br>
<br clear="all">cheers,<br><br>satra<br>
<br><br><div class="gmail_quote">On Thu, Oct 28, 2010 at 3:57 AM, MinRK <span dir="ltr"><<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div>Hello,</div><div><br></div>In order to test/demonstrate arbitrary DAG dependency support in the new ZMQ Python scheduler, I wrote an example using NetworkX, as Fernando suggested.<div><br></div><div>It generates a random DAG with a given number of nodes and edges, runs a set of empty jobs (one for each node) using the DAG as a dependency graph, where each edge represents a job depending on another.</div>


<div>It then validates the results, ensuring that no job ran before its dependencies, and draws the graph, with nodes arranged in X according to time, which means that all arrows must point to the right if the time-dependencies were met.</div>


<div><br></div><div>It happily handles pretty elaborate (hundreds of edges) graphs.</div><div><br></div><div>Too bad I didn't have this done for today's Py4Science talk.</div><div><br></div>
<div>
Script can be found here:</div><div><a href="http://github.com/minrk/ipython/blob/newparallel/examples/demo/dagdeps.py" target="_blank">http://github.com/minrk/ipython/blob/newparallel/examples/demo/dagdeps.py</a></div><div>
<br></div><font color="#888888"><div>

-MinRK</div><div><br></div>
</font><br>_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
<br></blockquote></div><br>