请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

_worker()方法中用了while True循环

老师您好,
_worker()方法中用了while True循环不停地从work_queue中取work_item,

想问下,什么情况下可以真正用到while True循环,具体点说,像如下这种情况,task1 = executor.submit(get_html, (3))会很快执行_worker(),task2 = executor.submit(get_html, (2))也是同样,为什么还需要在一个线程中不停循环取work_item呢? 谢谢

executor = ThreadPoolExecutor(max_workers=2)
task1 = executor.submit(get_html, (3))
task2 = executor.submit(get_html, (2))

正在回答 回答被采纳积分+3

1回答

bobby 2021-07-02 13:39:56

很多场景下都需要用while true啊,比如你写一个web的server服务 不得一直不断的监听用户是否有请求进来啊? 比如你要写一个定时任务,比如每天早上八点爬取一下知乎,比如你要写一个定时任务每天晚上3点需要统计一下日志文件等太多的场景都需要你的系统一直运行着而不能停了

0 回复 有任何疑惑可以回复我~
  • 提问者 慕九州4321812 #1
    谢谢Bobby老师,
    上边的问题我再解释下
    从源代码中可以看到,Future对象调用submit()方法,会生成workItem对象,并放入work_queue中,然后后调用_adjust_thread_count(),如果没超过max会继续生成线程。问题是:线程会调用_worker()函数,而_worker()函数中while循环不停从_work_queue中取出w。我想问下,_worker()函数中while循环的作用,因为workItem对象是在调用submit()方法后产生的,然后才放入_work_queue队列中。是否还有其他途径会有workItem对象放入work_queue队列中,如果有,_worker()函数中while循环才会起作用。
    回复 有任何疑惑可以回复我~ 2021-07-11 22:45:29
  • bobby 回复 提问者 慕九州4321812 #2
    其实这些问题比较简单,。你直接在对应的源码中ctrl+h全局搜索一下看看对应的逻辑是否还有其他地方被调用到了就知道了
    回复 有任何疑惑可以回复我~ 2021-07-12 11:25:49
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信