设置睡眠3秒后task1.done()返回false。

来源:11-7 ThreadPoolExecutor线程池

weixin_精慕门6437911

2024-09-13

import time
from concurrent.futures import ThreadPoolExecutor
def get_html(times):
    time.sleep(times)
    print("get page {} succuss".format(times))
    return times


executor = ThreadPoolExecutor(max_workers=2)
# submit是立即返回
task1 = executor.submit(get_html, (3))
task2 = executor.submit(get_html, (2))
# done用于判定某个任务是否完成,是future的方法
print(task1.done())
time.sleep(3)
print(task1.done())

图片描述
python版本3.6.2

写回答

1回答

bobby

2024-09-26

输出解释

  1. 第一次 print(task1.done()) 输出 False,因为任务 task1 尚未完成。

  2. time.sleep(3) 后,task1 应该已经执行完 get_html(3),所以第二次 print(task1.done()) 会输出 True

4. 几点注意

  • 你用的是 ThreadPoolExecutor(max_workers=2),所以 task1task2 可以同时运行,不会阻塞对方。

  • executor.submit(get_html, 3) 中,不需要额外的括号,3 是传给 get_html 函数的参数,所以直接写 executor.submit(get_html, 3) 即可。解释:第一个 task1.done() 返回 False,任务未完成;等 3 秒后,任务完成,第二次调用 task1.done() 返回 True

0
0

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程