Question about thread
Jp Calderone
exarkun at divmod.com
Fri Nov 19 10:10:53 EST 2004
On Fri, 19 Nov 2004 22:50:17 +0800, Valkyrie <valkyrie at cuhk.edu.hk> wrote:
>To be more precise, what I want to do is to have a threaded program to handle
> some jobs concurrently (while those jobs are fetching information from the
> Internet, so threading could speed up the process if the network is slow)
>
> start
> | (blahblahblah...)
> v
> +-----+-----+-----+-----+
> | | | | |
> --+-- --+-- --+-- --+-- --+--
> | | | | | | | | | |
> | A | | B | | C | | D | | E |
> | | | | | | | | | |
> --+-- --+-- --+-- --+-- --+--
> | | | | |
> +-----+-----+-----+-----+
> | (blahblahblah...)
> v
> finish!
If your goal is efficient network concurrency, threads are a second-rate solution. Asynchronous IO is the winner: http://www.twistedmatrix.com/
Here's an example (untested as usual):
from twisted.web.client import downloadPage
from twisted.internet import defer, reactor
# Map URLs to files to which to save them
URLs = {'www.google.com', 'google',
# ...
'wigu.com', 'wigu',
}
# Initiate the download and save of each page
downloads = []
for url in URLs:
downloads.append(downloadPage(url, open(URLs[url], 'w')))
# Wait for all of the downloads to finish, then stop
defer.DeferredList(downloads).addCallback(lambda r: reactor.stop())
# Start the reactor
reactor.run()
Jp
More information about the Python-list
mailing list