IMHO the problem with Python is the ability to take advantage of multicore/multiprocessor CPUs out of the box. Multiple threads in Python cannot run concurrently due to the global interpreter lock (GIL). <br><br>Stackless Python allows you to use lightweight threads (tasklets) that can be switched with less overhead and it allows for cooperative multitasking with the intention of making async programming easier. This helps with IO bound applications where you can have tens of thousands of tasklets running at the same time (try doing that with threads). It does not however allow you to take advantage of multi-core or multi-processor resources. It simply allows you to squeeze the most amount of work out of a single threaded process. AFAIK attempting to use threads in Stackless makes things worse (from what I could gather from the mailing lists).
<br><br>Also Psyco, might not provide many gains for your code if you&#39;re using NumPy to do most of the processing. Psyco will optimize Python code and if a lot of your time is spent in Python it might provide some benefits. You can give it a try but I would be surprised if it provides significant gains.
<br><br>In order to perform your simulations concurrently you will likely need to use multiple python processes that might run on either the same or multiple boxes. Depending on your problem domain you might be able to split the data into chunks and have each node process one set of data or you might need to share all the data between all the processes. If you don&#39;t need to do any IPC you can simly spawn multiple Python processes. Otherwise you might attempt this with MPI or you can take a look at Pyro.
<br><br>Hope this helps.<br><br>Cosmin Stejerean<br><a href="http://www.offbytwo,com">http://www.offbytwo,com</a><br><br><div><span class="gmail_quote">On 8/24/07, <b class="gmail_sendername"><a href="mailto:seun.osewa@gmail.com">
seun.osewa@gmail.com</a></b> &lt;<a href="mailto:seun.osewa@gmail.com">seun.osewa@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello John,<br><br>Python doesn&#39;t take advantage of multiple CPUs unless you us os.fork()<br>on UNIX. The deadlock you experienced is probably just the two threads<br>struggling for the Global Interpreter Lock.&nbsp;&nbsp;Another (painful) way to
<br>achieve concurrency is to store all your data in a mmaped file<br>accessible from multiple Python processes.<br><br>But there&#39;s one other way to speed up your software on a single core:&nbsp;&nbsp;Psyco!<br>&nbsp;&nbsp;<a href="http://psyco.sf.net">
http://psyco.sf.net</a><br><br>Regards,<br>Seun OSewa<br><br>On 8/24/07, Chris Lee &lt;<a href="mailto:c.j.lee@tnw.utwente.nl">c.j.lee@tnw.utwente.nl</a>&gt; wrote:<br>&gt; Hi Everyone,<br>&gt;<br>&gt; I suspect that this question has come up before, but a search of the
<br>&gt; archive revealed nothing so please forgive me if you are tired of answering.<br>&gt; Basically I need some hints on using python (or stackless python) on a<br>&gt; multi core CPU.<br>&gt; Let me give some details of the project:
<br>&gt; I am running simulations on light traveling through a very disordered<br>&gt; medium. I do this using a ballistic approximation, which essentially<br>&gt; means that I assume the light consists of particles and then generate a
<br>&gt; bunch of random numbers for each particle. I use the random numbers to<br>&gt; determine the path taken by the particle.<br>&gt;<br>&gt; In practice, I simulate between 1e4 and 1e6 particles at a time taking<br>&gt; advantage of numpy and python to keep the code clean while still getting
<br>&gt; good speed from a single CPU core. However, the simulations are becoming<br>&gt; more sophisticated and I would like to be able to take advantage of<br>&gt; multiple core CPUs and maybe even multiple computers.<br>
&gt;<br>&gt; My first attempt was a disaster. I used the threading module and simple<br>&gt; split the task into two threads. The interpreter put each thread on a<br>&gt; separate CPU and bus deadlock ensued (each CPU was trying to access
<br>&gt; 136*5e5 bytes of memory simultaneously).<br>&gt;<br>&gt; I realized that I would need finer grained control over how the data was<br>&gt; apportioned between threads, but doing this using the python queue and<br>
&gt; events starts to look a bit messy again. That was when I happened about<br>&gt; stackless python and tasklets. With tasklets I get the finegrained<br>&gt; control over data access that allows to me to ease the bus contention
<br>&gt; ... but all the tasklets run on a single core. Even if I take the<br>&gt; trouble to spawn python threads and the threads run method invokes a<br>&gt; tasklet, they all run on the same core.<br>&gt;<br>&gt; Can someone give me some advice towards making use of multicores,
<br>&gt; preferable with stackless--the code is sooo much nicer--but I&#39;ll take<br>&gt; any python based solution at this point.<br>&gt;<br>&gt; Cheers<br>&gt; Chris<br>&gt;<br>&gt; --<br>&gt; **********************************************
<br>&gt; *&nbsp;&nbsp;Chris Lee&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>&gt; *&nbsp;&nbsp;Laser physics and nonlinear optics group&nbsp;&nbsp;*<br>&gt; *&nbsp;&nbsp;MESA+ Institute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>&gt; *&nbsp;&nbsp;University of Twente&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>
&gt; *&nbsp;&nbsp;Phone: ++31 (0)53 489 3968&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>&gt; *&nbsp;&nbsp;fax: ++31 (0) 53 489 1102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>&gt; **********************************************<br>&gt;<br>&gt;<br>&gt; _______________________________________________
<br>&gt; Stackless mailing list<br>&gt; <a href="mailto:Stackless@stackless.com">Stackless@stackless.com</a><br>&gt; <a href="http://stackless.com/cgi-bin/mailman/listinfo/stackless">http://stackless.com/cgi-bin/mailman/listinfo/stackless
</a><br>&gt;<br><br><br>--<br>Seun Osewa<br><a href="http://www.nairaland.com">http://www.nairaland.com</a> [vast Nigerian forum]<br><br>_______________________________________________<br>Stackless mailing list<br><a href="mailto:Stackless@stackless.com">
Stackless@stackless.com</a><br><a href="http://stackless.com/cgi-bin/mailman/listinfo/stackless">http://stackless.com/cgi-bin/mailman/listinfo/stackless</a><br></blockquote></div><br>