Hi everyone,<br><br>Lee &amp; I discussed a bit in the ImageJDev chat room, but for the benefit of the list archives: this was done in several of today&#39;s commits: <a href="http://dev.imagejdev.org/trac/imagej/changeset/3682">r3682</a>, <a href="http://dev.imagejdev.org/trac/imagej/changeset/3683">r3683</a>, <a href="http://dev.imagejdev.org/trac/imagej/changeset/3684">r3684</a>, <a href="http://dev.imagejdev.org/trac/imagej/changeset/3685">r3685</a>, <a href="http://dev.imagejdev.org/trac/imagej/changeset/3686">r3686</a> and <a href="http://dev.imagejdev.org/trac/imagej/changeset/3687">r3687</a>.<br>

<br>-Curtis<br><br><div class="gmail_quote">On Thu, Aug 11, 2011 at 2:50 PM, Lee Kamentsky <span dir="ltr">&lt;<a href="mailto:leek@broadinstitute.org" target="_blank">leek@broadinstitute.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




Hi Curtis, all,<br>
I&#39;m looking at ModuleService.run and thinking of how to use it in CellProfiler. There&#39;s a comment:<br>
// TODO - Implement a better threading mechanism for launching modules.<br>
// Perhaps a ThreadService so that the UI can query currently<br>
// running modules and so forth?<br>
<br>
which is pretty relevant. I think that the natural thing to do would be to return java.util.concurrent.Future&lt;<u></u>Map&lt;String, Object&gt;&gt; which would be a future promising the map of outputs for the module. You&#39;d wrap the ModuleRunner in a java.util.concurrent.Callable&lt;<u></u>Map&lt;String, Object&gt;&gt; instead of in a Runnable and use java.util.concurrent.<u></u>FutureTask to return the future.<br>





<br>
I like a programmatic style myself where you do things step-by-step instead of an event-driven style like a ThreadService. This would be great for scripting - you can imagine a script that executes a module, then, further down, gets the results from the execution. The script would proceed in parallel with the module execution and the additional boilerplate for threading would be minimal - just an additional call to Future.get() at the point where the result was needed.<br>




<font color="#888888">
<br>
--Lee<br>
</font></blockquote></div><br>