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.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to