<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7652.24">
<TITLE>Re: [IPython-user] ipython1 and farm tasking</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi Brian,<BR>
<BR>
Thanks for your answer it help get to do what I needed and understand better<BR>
the code.<BR>
I have another question.<BR>
I am going to run my task in a non-blocking mode. My task are going to be<BR>
running for few hours. How do I get to check the status of a task? I want to<BR>
know if it is done. Do you use tc.get_task_results(id,block=False) ? It will<BR>
return None if the task is not done.<BR>
<BR>
How will you find the number of task still in the queue that need to be run?<BR>
<BR>
<BR>
By the way what a great package. I am so glad I found it for my development.<BR>
Thanks<BR>
Alex<BR>
<BR>
<BR>
On 2/27/08 2:29 PM, &quot;Brian Granger&quot; &lt;ellisonbg.net@gmail.com&gt; wrote:<BR>
<BR>
&gt; Alex,<BR>
&gt;<BR>
&gt; First, I would suggest updating your ipython1 install from our svn<BR>
&gt; repository.&nbsp; We are about to push out a major new version and the<BR>
&gt; documentation is _much_ better.&nbsp; Also, there are many new features<BR>
&gt; that will hopefully help you.&nbsp; Here is a simple example (using the<BR>
&gt; latest svn of ipython1):<BR>
&gt;<BR>
&gt; In [1]: from ipython1.kernel import client<BR>
&gt;<BR>
&gt; In [2]: mec = client.MultiEngineClient(('127.0.0.1',10105))<BR>
&gt;<BR>
&gt; In [3]: tc = client.TaskClient(('127.0.0.1',10113))<BR>
&gt;<BR>
&gt; In [4]: def fold_package(x):<BR>
&gt;&nbsp;&nbsp;&nbsp; ...:&nbsp;&nbsp;&nbsp;&nbsp; return 2.0*x<BR>
&gt;&nbsp;&nbsp;&nbsp; ...:<BR>
&gt;<BR>
&gt; In [5]: mec.push_function(dict(fold_package=fold_package))<BR>
&gt; Out[5]: [None, None, None, None]<BR>
&gt;<BR>
&gt; In [6]: tasks =<BR>
&gt; [client.Task(&quot;y=fold_package(x)&quot;,push={'x':x},pull=('y',)) for x in<BR>
&gt; range(128)]<BR>
&gt;<BR>
&gt; In [7]: task_ids = [tc.run(t) for t in tasks]<BR>
&gt;<BR>
&gt; In [8]: tc.barrier(task_ids)<BR>
&gt;<BR>
&gt; In [9]: task_results = [tc.get_task_result(tid) for tid in task_ids]<BR>
&gt;<BR>
&gt; In [10]: results = [tr.ns.y for tr in task_results]<BR>
&gt;<BR>
&gt; In [11]: print results<BR>
&gt; [0.0, 2.0, 4.0, 6.0, 8.0, 10.0, 12.0, 14.0, 16.0, 18.0, 20.0, 22.0,<BR>
&gt; 24.0, 26.0, 28.0, 30.0, 32.0, 34.0, 36.0, 38.0, 40.0, 42.0, 44.0,<BR>
&gt; 46.0, 48.0, 50.0, 52.0, 54.0, 56.0, 58.0, 60.0, 62.0, 64.0, 66.0,<BR>
&gt; 68.0, 70.0, 72.0, 74.0, 76.0, 78.0, 80.0, 82.0, 84.0, 86.0, 88.0,<BR>
&gt; 90.0, 92.0, 94.0, 96.0, 98.0, 100.0, 102.0, 104.0, 106.0, 108.0,<BR>
&gt; 110.0, 112.0, 114.0, 116.0, 118.0, 120.0, 122.0, 124.0, 126.0, 128.0,<BR>
&gt; 130.0, 132.0, 134.0, 136.0, 138.0, 140.0, 142.0, 144.0, 146.0, 148.0,<BR>
&gt; 150.0, 152.0, 154.0, 156.0, 158.0, 160.0, 162.0, 164.0, 166.0, 168.0,<BR>
&gt; 170.0, 172.0, 174.0, 176.0, 178.0, 180.0, 182.0, 184.0, 186.0, 188.0,<BR>
&gt; 190.0, 192.0, 194.0, 196.0, 198.0, 200.0, 202.0, 204.0, 206.0, 208.0,<BR>
&gt; 210.0, 212.0, 214.0, 216.0, 218.0, 220.0, 222.0, 224.0, 226.0, 228.0,<BR>
&gt; 230.0, 232.0, 234.0, 236.0, 238.0, 240.0, 242.0, 244.0, 246.0, 248.0,<BR>
&gt; 250.0, 252.0, 254.0]<BR>
&gt;<BR>
&gt; Or if you don't need load balancing:<BR>
&gt;<BR>
&gt; # This sends the fold_package function for you!<BR>
&gt; results = mec.map(fold_package, range(128))<BR>
&gt;<BR>
&gt; Let us know if you run into other problems.<BR>
&gt;<BR>
&gt; Cheers,<BR>
&gt;<BR>
&gt; Brian<BR>
&gt;<BR>
&gt; On Mon, Feb 25, 2008 at 7:44 PM, Alexandre Gillet &lt;gillet@scripps.edu&gt; wrote:<BR>
&gt;&gt; Hi,<BR>
&gt;&gt;<BR>
&gt;&gt;&nbsp; I just started using ipython1 do to distribute job on multiple cpu.&nbsp; I<BR>
&gt;&gt;&nbsp; am having some issue and I am not sure how it works.<BR>
&gt;&gt;&nbsp; I want to pass a function to be run by each task on each client.<BR>
&gt;&gt;&nbsp; In the following code, the function fold_package need to be run on each<BR>
&gt;&gt;&nbsp; client.<BR>
&gt;&gt;<BR>
&gt;&gt;&nbsp; packages_list=[ '3114', '3115','3116']<BR>
&gt;&gt;&nbsp; # create a&nbsp; remote&nbsp; controller instance<BR>
&gt;&gt;&nbsp; rc = kernel.RemoteController(('127.0.0.1',10105))<BR>
&gt;&gt;&nbsp; # create task controller instance<BR>
&gt;&gt;&nbsp; tc = kernel.TaskController(('127.0.0.1', 10113))<BR>
&gt;&gt;&nbsp; # commands won't block by default<BR>
&gt;&gt;&nbsp; rc.block = False<BR>
&gt;&gt;&nbsp; # get id of available engine<BR>
&gt;&gt;&nbsp; engines_id = rc.getIDs()<BR>
&gt;&gt;&nbsp; # process the list of packages by dispatching them to different computer<BR>
&gt;&gt;&nbsp; # create the task list<BR>
&gt;&gt;&nbsp; tasks = [kernel.Task(&quot;fold_package(%s)&quot;%t) for t in packages_list]<BR>
&gt;&gt;&nbsp; # test task controller<BR>
&gt;&gt;&nbsp; taskIDs = [tc.run(t) for t in tasks]<BR>
&gt;&gt;<BR>
&gt;&gt;<BR>
&gt;&gt;&nbsp; when I run that code I get:<BR>
&gt;&gt;&nbsp; NameError: name 'fold_package' is not defined<BR>
&gt;&gt;<BR>
&gt;&gt;&nbsp; My questions are;<BR>
&gt;&gt;&nbsp; How do you pass a function define in my script to the client engine?<BR>
&gt;&gt;&nbsp; Or Do I have to create a package that will contains my function and<BR>
&gt;&gt;&nbsp; installed it on each client?<BR>
&gt;&gt;<BR>
&gt;&gt;&nbsp; Thanks for any advices and answers.<BR>
&gt;&gt;&nbsp; Alex<BR>
&gt;&gt;<BR>
&gt;&gt;&nbsp; --<BR>
&gt;&gt;&nbsp;&nbsp; o Alexandre Gillet&nbsp;&nbsp;&nbsp; Ph.D.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email: gillet@scripps.edu<BR>
&gt;&gt;&nbsp; /&nbsp; The Scripps Research Institute,<BR>
&gt;&gt;&nbsp; o&nbsp; Dept. Molecular Biology,&nbsp; MB-5,<BR>
&gt;&gt;&nbsp; \&nbsp; 10550&nbsp; North Torrey Pines Road,<BR>
&gt;&gt;&nbsp;&nbsp; o La Jolla,&nbsp; CA 92037-1000,&nbsp; USA.<BR>
&gt;&gt;&nbsp; /&nbsp; tel: (858) 784-2053<BR>
&gt;&gt;&nbsp; o&nbsp; fax: (858) 784-2860<BR>
&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp; web: <A HREF="http://mgl.scripps.edu/projects/tangible_models/">http://mgl.scripps.edu/projects/tangible_models/</A><BR>
&gt;&gt;&nbsp; _______________________________________________<BR>
&gt;&gt;&nbsp; IPython-user mailing list<BR>
&gt;&gt;&nbsp; IPython-user@scipy.org<BR>
&gt;&gt;&nbsp; <A HREF="http://lists.ipython.scipy.org/mailman/listinfo/ipython-user">http://lists.ipython.scipy.org/mailman/listinfo/ipython-user</A><BR>
&gt;&gt;<BR>
<BR>
--<BR>
&nbsp;o Alexandre Gillet Ph.D.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email: gillet (-at-) scripps.edu<BR>
/&nbsp; The Scripps Research Institute,<BR>
o&nbsp; Dept. Molecular Biology,&nbsp; MB-5,<BR>
\&nbsp; 10550&nbsp; North Torrey Pines Road,<BR>
&nbsp;o La Jolla,&nbsp; CA 92037-1000,&nbsp; USA.<BR>
/&nbsp; tel: (858) 784-2053<BR>
o&nbsp; fax: (858) 784-2860<BR>
&nbsp;&nbsp;&nbsp; web: <A HREF="http://mgl.scripps.edu/projects/tangible_models/">http://mgl.scripps.edu/projects/tangible_models/</A><BR>
<BR>
</FONT>
</P>

</BODY>
</HTML>