示例1:等待子线程执行结束,主线程再结束
import time
from concurrent.futures import ThreadPoolExecutor
def task(video_uri):
print("开始执行任务",video_uri)
time.sleep(5)
#创建线程池,最多维护10个线程
pool = ThreadPoolExecutor(10)
url_list=["{}".format(i) for i in range(300)]
for url in url_list:
#在线程池中提交一个任务,线程池中如果有空闲线程,则分配一个线程去执行,执行完毕后再将线程交还给线程池;如果没有空闲线程,则等待
pool.submit(task,url)
print("执行中。。。")
pool.shutdown(True) #等线程池中的任务执行完毕后,在继续执行
print("END")
#END在所有内容执行结束后,才会被打印
示例2:任务执行完,再干一些其他的事儿
import time
import random
from concurrent.futures import ThreadPoolExecutor
def task(video_uri):
print("开始执行任务",video_uri)
time.sleep(2)
print("打印的结果是",video_uri)
return video_uri
def done(response):
print("任务执行后的返回值:",response.result())
#创建线程池,最多维护10个线程
pool = ThreadPoolExecutor(10)
url_list=["{}".format(i) for i in range(10)]
for url in url_list:
#在线程池中提交一个任务,线程池中如果有空闲线程,则分配一个线程去执行,执行完毕后再将线程交还给线程池;如果没有空闲线程,则等待
future = pool.submit(task,url)
future.add_done_callback(done) #是子主线程执行
print("执行中。。。")
pool.shutdown(True) #等线程池中的任务执行完毕后,在继续执行
print("END")
示例3:最终同一获取结果
import time
import random
from concurrent.futures import ThreadPoolExecutor,Future
def task(video_uri):
print("开始执行任务",video_uri)
time.sleep(2)
print("打印的结果是",video_uri)
return video_uri
def done(response):
print("任务执行后的返回值:",response.result())
#创建线程池,最多维护10个线程
pool = ThreadPoolExecutor(10)
future_list = []
url_list=["{}".format(i) for i in range(10)]
for url in url_list:
#在线程池中提交一个任务,线程池中如果有空闲线程,则分配一个线程去执行,执行完毕后再将线程交还给线程池;如果没有空闲线程,则等待
future = pool.submit(task,url)
future_list.append(future)
pool.shutdown(True) #等线程池中的任务执行完毕后,在继续执行
for fu in future_list:
print("循环:",fu.result())
网友评论