我写了一个脚本,其中有多个线程(使用 threading.Thread
创建),从一个 Queue
中获取 URL 并使用 queue.get_nowait()
进行处理 HTML。我是多线程编程的新手,对于 queue.task_done()
函数的目的感到困惑。
当 Queue
为空时,它会自动返回 queue.Empty
异常。因此,我不理解为什么每个线程都需要调用 task_done()
函数。我们知道队列为空时就完成了,那么为什么要通知它工作线程已经完成了它们的工作(得到了来自队列的 URL 后与队列无关的工作)?
能否提供一个代码示例(最好使用 urllib
、文件 I/O 或其他内容,而不是斐波那契数列和打印“Hello”),展示这个函数在实际应用中如何使用?
queue.Empty
异常时知道我已经完成了呢?为什么URL队列需要知道我成功地将某些内容输入到数据库中或处理一些HTML呢?队列应该关心的只是所有URL是否已被分派到某个线程。 - J. TaylorQueue.join
的人需要知道。 - user2357112task_done
来知道他们是否完成了工作。task_done
是一种向任何等待工作完成的线程传达信息的方式。 - user2357112join()
,那么您也不需要知道或关心task_done()
。 - user4815162342