推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
defias
V2EX  ›  Python

queue 模块对象的 task_done 方法有什么用?

  •  
  •   defias · Nov 1, 2015 · 5512 views
    This topic created in 3983 days ago, the information mentioned may be changed or developed.
    python 的 queue 队列中的任务取出一个执行完后,需要调用 task_done 方法来通知 queue ,不知道这个有什么作用,因为本来 get 方法在从 queue 中取任务时,就会从 queue 中删掉已取出的任务。如果不调用 task_done 会怎么样?比如当 get 取出一个任务后执行完又 put 放回 queue 中的情况。
    4 replies  •  2015-11-01 13:07:50 +08:00
    exploitcat
        1
    exploitcat  
       Nov 1, 2015
    不 task_done 线程退不出来,队列是阻塞的
    Damnever
        2
    Damnever  
       Nov 1, 2015
    放入队列的个数要和 task_done 调用次数相等,也就是说你每取出来一个,必须 task_done ,要不然计数不相等, join 的时候就不知道什么时候退出
    lcqtdwj
        3
    lcqtdwj  
       Nov 1, 2015
    这是一种同步机制
    defias
        4
    defias  
    OP
       Nov 1, 2015
    谢谢各位的回复,大概的明白了一些。
    @Damnever 你这里的 join 应该指的是队列的 join : Queue.join() 吧,如果代码中没用用到 Queue.join() 而是用线程的 join ,即主线程中用 sonthread.join(60)来等待子线程运行完成或超时,而不关心 queue 中的任务是否完成(因为可能根本无法完成),那么是否从 queue 中取出来一个后,用不用 task_done 都没关系了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   806 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:59 · PVG 05:59 · LAX 14:59 · JFK 17:59
    ♥ Do have faith in what you're doing.