- 创建线程池(concurrent.futures.ThreadPoolExecutor)
from concurrent.futures import ThreadPoolExecutor
import time
# 模拟请求html延迟
def get_html(times):
time.sleep(times)
return times
# __init__(self, max_workers=None, thread_name_prefix='')
executor = ThreadPoolExecutor(2) # 创建2个线程 也可以传参max_workers=2
# 通过submit函数提交执行的函数到线程池中,submit函数立即返回,不阻塞
# submit(fn, *args, **kwargs)
task1 = executor.submit(get_html,3) # 传入参数3,返回Future实例
task2 = executor.submit(get_html,2) # 传入参数2
task3 = executor.submit(get_html,1)
# done方法用于判定某个任务是否完成
print(task1.done()) # False
# cancel 方法用于取消某个任务,该任务还没放入线程池中才能取消
print(task3.cancel()) # True 线程数只有2个,提交了3个任务,第3个未加入,可取消
time.sleep(5)
print(task1.done()) # True
# result方法可以获取task的执行结果,阻塞
print(task1.result()) # 3
- 获取所有返回结果,无顺序(concurrent.futures.as_completed)
如果等待多个执行结果,用判断是