Russel Winder wrote:
Steven,

On Sun, 2012-05-13 at 10:22 +1000, Steven D'Aprano wrote:
carlo locci wrote:
Hello All,
I've started to study python a couple of month ago(and I truly love it :)),
however I'm having some problems understanding how to modify a sequential
script and make it multithreaded (I think it's because I'm not used to
think in that way),
No, that's because multithreading and parallel processing is hard.

Shared memory multithreading may be hard due to locks, semaphores,
monitors, etc., but concurrency and parallelism need not be hard.

No hard compared to what?


Using processes and message passing, using dataflow, actors or CSP,
parallelism and concurrency is far more straightforward. Not easy,
agreed, but then programming isn't easy.


My argument is that once you move beyond the one-operation-after-another programming model, almost any parallel processing problem is harder than the equivalent sequential version, inherently due to the parallelism. Except perhaps for "embarrassingly parallel" problems, parallelism adds complexity even if your framework abstracts away most of the tedious detail like semaphores.

http://en.wikipedia.org/wiki/Embarrassingly_parallel

Once you move beyond sequential execution, you have to think about issues that don't apply to sequential programs: how to divide the task up between processes/threads/actors/whatever, how to manage their synchronization, resource starvation (e.g. deadlocks, livelocks), etc.

We have linear minds and it doesn't take that many real-time parallel tasks to overwhelm the human brain. I'm not saying that people can't reason in parallel, because we clearly can and do, but it's inherently harder than sequential reasoning.


The GIL in Python is a bad thing for parallelism. Using the
multiprocessing package or concurrent.futures gets over the problem.
Well sort of, these processes are a bit heavyweight compared to what can
be achieved on the JVM or with Erlang.

Python doesn't have a GIL. Some Python implementations do, most obviously CPython, the reference implementation. But Jython and IronPython don't. If the GIL is a problem for your program, consider running it on Jython or IronPython.



--
Steven

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to