<br><br><div class="gmail_quote">On Sun, Oct 18, 2009 at 2:34 PM, Gökhan Sever <span dir="ltr">&lt;<a href="mailto:gokhansever@gmail.com">gokhansever@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><div class="gmail_quote"><div>Moreeeeee speed-up :)<br><br>Next step is to use multiprocessing module.<br clear="all"></div></div></blockquote><div><br>I did two tests since I was not sure which timing to believe:<br>
<br>real    6m37.591s<br>user    10m16.450s<br>sys    0m4.808s<br><br>real    7m22.209s<br>user    11m21.296s<br>sys    0m5.540s<br><br>which in result I figured out real is what I want to see.  So the improvement with respect to original linear 18m 5s run is 2.4 to 2.7X speed-up in a Dual Core 2.5 Ghz laptop using Python&#39;s multiprocessing module, which is great only adding a few line of code and slightly modifying my original process_all wrapper script. <br>
<br>Here is the code:<br><br><br>#!/usr/bin/env python<br><br>&quot;&quot;&quot;<br>Execute postprocessing_saudi script in parallel using multiprocessing module.<br>&quot;&quot;&quot;<br><br>from multiprocessing import Pool<br>
from subprocess import call<br>import os<br><br><br>def find_sea_files():<br><br>    file_list, path_list = [], []<br>    init = os.getcwd()<br><br>    for root, dirs, files in os.walk(&#39;.&#39;):<br>        dirs.sort()<br>
        for file in files:<br>            if file.endswith(&#39;.sea&#39;):<br>                file_list.append(file)<br>                os.chdir(root)<br>                path_list.append(os.getcwd())<br>                os.chdir(init)<br>
<br>    return file_list, path_list<br><br><br>def process_all(pf):<br>    os.chdir(pf[0])<br>    call([&#39;postprocessing_saudi&#39;, pf[1]])<br><br><br>if __name__ == &#39;__main__&#39;:<br>    pool = Pool(processes=2)              # start 2 worker processes<br>
    files, paths = find_sea_files()<br>    pathfile = [[paths[i],files[i]] for i in range(len(files))]<br>    pool.map(process_all, pathfile)<br><br><br>The main difference is to change map call since Python&#39;s original map supports only one iterable argument. This approach also shows execution results on the terminal screen unlike IPython&#39;s. I am assuming like IPython&#39;s, multiprocessing module should be able to run on external nodes. Which means once I can set a few fast external machines I can perform a few more tests. <br>
</div></div><br>-- <br>Gökhan<br>