[Tutor] threading mind set
Steven D'Aprano
steve at pearwood.info
Sun May 13 02:22:04 CEST 2012
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.
> as well as when it's best to use it(some say that
> because of the GIL I won't get any real benefit from threading my script).
That depends on what your script does.
In a nutshell, if your program is limited by CPU processing, then using
threads in Python won't help. (There are other things you can do instead, such
as launching new Python processes.)
If your program is limited by disk or network I/O, then there is a possibility
you can speed it up with threads.
> It's my understanding that threading a program in python can be useful when
> we've got some I/O involved,
To see the benefit of threads, it's not enough to have "some" I/O, you need
*lots* of I/O. Threads have some overhead. Unless you save at least as much
time as just starting and managing the threads consumes, you won't see any
speed up.
In my experience, for what little it's worth [emphasis on "little"], unless
you can keep at least four threads busy doing separate I/O, it probably isn't
worth the time and effort. And it's probably not worth it for trivial scripts
-- who cares if you speed your script up from 0.2 seconds to 0.1 seconds?
But as a learning exercise, sure, go ahead and convert your script to threads.
One experiment is worth a dozen opinions.
You can learn more about threading from here:
http://www.doughellmann.com/PyMOTW/threading/
By the way, in future, please don't decorate your code with stars:
> * def read():*
> * import csv*
> * with open('C:\\test\\VDB.csv', 'rb') as somefile:*
[...]
We should be able to copy and paste your code and have it run immediately, not
have to spend time editing it by hand to turn it back into valid Python code
that doesn't give a SyntaxError on every line.
See also this: http://sscce.org/
--
Steven
More information about the Tutor
mailing list