my multi-download program can't finish
MRAB
python at mrabarnett.plus.com
Thu Sep 8 11:25:53 EDT 2011
On 08/09/2011 05:24, 守株待兔 wrote:
> here is the program,
>
> # basic structure,omit something
> import Queue
> import httplib2
> import threading
> jobs = Queue.Queue()
> name=something #omit ,it is a web list to download
> for x in name:
> jobs.put(x)
>
> def download():
> while not jobs.empty():
> try:
> url = jobs.get()
> hx = httplib2.Http()
> resp, content = hx.request(url, headers=headers)
> jobs.task_done()
> except:
> print "wrong" , url
>
> if __name__ == '__main__':
>
> for i in range(10):
> threading.Thread(target=download).start()
> jobs.join()
>
> when it run ,it can download someting ,
> it is strang:there is wrong output ,some web can't get,but the
> program can't stop,it stay ,run ,can't fininsh,
> i don't know why?
>
The line:
jobs.join()
will wait until every job has been marked as done by:
jobs.task_done()
In function "download", if there's an exception, it will go to the
exception handler and print a message, but there's no:
jobs.task_done()
there to tell the queue that the job has been done.
You need to tell it when a job has been processed. It doesn't care
whether a job succeeded or failed, only whether it has been processed.
More information about the Python-list
mailing list