02_线程池

from concurrent.futures import ThreadPoolExecutor
import time
# 线程池-写法
# 创建任务
# def func(name):
# for i in range(10):
# print(name, i)
#
# if __name__ == '__main__':
# with ThreadPoolExecutor(10) as t: # 线程池开10个线程
# for i in range(100): # 爬图片,这里装大批图片地址
# t.submit(func, f"周杰伦{i}")
# # t.submit(func, "周杰伦") # submit 提交任务
# # t.submit(func, "王力宏")
# # t.submit(func, "林俊杰")
#

# 线程池要接收返回值任务应该这么办?
def func(name, t):
time.sleep(t)
print("我是", name)
return name # return 的值怎么拿到 - 方法1 t.submit(func, "周杰伦").add_done_callback(fn)
def fn(res):
print(res.result()) # 必须通过 result 收到返回值

if __name__ == '__main__':
with ThreadPoolExecutor(3) as t:
# t.submit(func, "周杰伦", 2).add_done_callback(fn) # 提交任务的时候给你绑定一个事,任务完成执行 fn
# t.submit(func, "王力宏", 1).add_done_callback(fn) # 1 表示睡1秒钟
# t.submit(func, "周润发", 3).add_done_callback(fn) # 下载图片,电影用 submit
#
# # t.submit().add_done_callback() 返回即执行 callback函数
# # 返回 callback 执行的顺序是不确定的,返回值的顺序是不确定的
result = t.map(func, ["周杰伦", "王力宏", "王富贵"], [5, 1, 3]) # map 映射 周杰伦和2组队一起
print(result) # result 是个生成器
for i in result:
print(i)
# map 返回值 generator 是生成器,返回的内容和任务分发的顺序是一致的。
posted @ 2023-07-09 18:39  严永富  阅读(4)  评论(0)    收藏  举报