Question about thread

Valkyrie valkyrie at cuhk.edu.hk
Fri Nov 19 10:29:44 EST 2004


Thanks for your suggestion :) But I would like to have a more standard solution,
I still don't know how to do so im mind...


Jp Calderone wrote:
> 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