Python--day41--线程池--python标准模块concurrent.futures

 1,线程池代码示例:(注:进程池的话只要将以下代码中的ThreadPoolExecutor替换成ProcessPoolExecutor即可,这里不演示)

import time
from concurrent.futures import ThreadPoolExecutor

def func(n):
    time.sleep(2)
    print(n)
    return  n*n

#max_workers 指定线程池多大
#1,创建线程池
tpool = ThreadPoolExecutor(max_workers=5) #默认 不要超过cpu个数*5
t_lst = []
#2,线程池异步提交
for i in range(20):
    t = tpool.submit(func,i)
    t_lst.append(t)
tpool.shutdown()    #close+join
#3,获取结果
print('主线程')
#这一步是一定按照顺序打印的
for t in t_lst:print('***',t.result())

运行结果:

2,tpool.shutdown() #close+join  如果没有shutdowm()函数,将出现边进入列表边打印现象,根据需求选择要不要这个函数

代码示例:略

3,线程池里面加回调函数:

 1 import time
 2 from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
 3 
 4 def func(n):
 5     time.sleep(2)
 6     print(n)
 7     return  n*n
 8 
 9 def call_back(m):
10     print('结果是%s'%m.result(0))
11 
12 #max_workers 指定线程池多大
13 #1,创建线程池
14 tpool = ThreadPoolExecutor(max_workers=5) #默认 不要超过cpu个数*5
15 for i in range(20):
16     t = tpool.submit(func,i).add_done_callback(call_back)

运行结果:

 

posted @ 2019-02-01 21:52  莱茵河的雨季  阅读(153)  评论(0编辑  收藏  举报