# -*- coding: utf-8 -*-
import time
from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED, as_completed
def sleep_task(sleep_time):
print('sleep time:{} s'.format(sleep_time))
time.sleep(sleep_time)
print('end')
return '完成'
executor = ThreadPoolExecutor(max_workers=2) # 设置max_workers线程池中的线程数
task1 = executor.submit(sleep_task, 2) # submit 开始进程
print(task1.done()) # done 查看线程是否完成
time.sleep(3)
print(task1.done()) # done 查看线程是否完成
cancel_status = task1.cancel() # cancel 取消线程,已运行的线程无法取消
print(cancel_status)
executor = ThreadPoolExecutor(max_workers=2) # 设置max_workers线程池中的线程数
task1 = executor.submit(sleep_task, 2) # submit 开始进程
task2 = executor.submit(sleep_task, 3) # submit 开始进程
task3 = executor.submit(sleep_task, 3) # submit 开始进程
# cancel 取消线程,已运行的线程无法取消
print(task1.cancel())
print(task2.cancel())
print(task3.cancel())
executor = ThreadPoolExecutor(max_workers=2) # 设置max_workers线程池中的线程数
task1 = executor.submit(sleep_task, 2) # submit 开始进程
task2 = executor.submit(sleep_task, 3) # submit 开始进程
task3 = executor.submit(sleep_task, 3) # submit 开始进程
# wait 当所有的线程运行完毕后关闭主线程, return_when 返回的时间
wait([task1, task2, task3], return_when=ALL_COMPLETED)
print('main end')
executor = ThreadPoolExecutor(max_workers=2) # 设置max_workers线程池中的线程数
task1 = executor.submit(sleep_task, 2) # submit 开始进程
task2 = executor.submit(sleep_task, 3) # submit 开始进程
task3 = executor.submit(sleep_task, 3) # submit 开始进程
task_list = [task1, task2, task3]
# as_completed 当某个线程完成后返回告知信息
for task in as_completed(task_list):
print(task)
print(task.result()) # result 线程完成后返回的数据
print('main end')
# 添加守护线程
from threading import Thread
def sleep_task(sleep_time):
print('sleep time:{} s'.format(sleep_time))
time.sleep(sleep_time)
print('end')
return '完成'
t1 = Thread(target=sleep_task, args=(3,))
t1.setDaemon(Ture) # 设置守护进程,主线程结束时子线程直接结束
t1.start()