首页 > 编程语言 > 详细

线程池-The End

时间:2019-09-18 22:29:18      阅读:55      评论:0      收藏:0      [点我收藏+]

线程池-The End

线程池介绍

线程池是一个全新的模块-- from concurrent.futures import ThreadPoolExecutor

concurrent.futures模块提供了高度封装的异步调用接口
ThreadPoolExecutor:线程池,提供异步调用
ProcessPoolExecutor: 进程池,提供异步调用

线程池与进程池的用法完全一样,提供的接口也是完全一致的

线程池不提供同步提交任务的方法,只有异步提交
submit()

shutdown(wait) 相当于进程池的pool.close + pool.join()的操作
wait = True 等待池内所有任务执行完毕回收玩资源后才继续
wait = False 立即返回,并不会等待池内的任务执行完毕

submit 和 map 必须在shutdown之前

map 拿不到返回值

result() 取结果

add_done_callback(fn) 回调函数

import time
from concurrent.futures import ThreadPoolExecutor

def func(n):
    time.sleep(1)
    print(f'[{n}]',end='\t')
    return n*n

tp = ThreadPoolExecutor(max_workers=3)

for i in range(1,22):
    t = tp.submit(func,i)
    print(f'{i}的幂为:',t.result(),end='\t')
    if i %3 == 0:
        print()
tp.shutdown() # 相当于close+join  没有shutdown会更高效
print()
print('所有子进程结束!')

'''
[1] 1的幂为: 1     [2] 2的幂为: 4     [3] 3的幂为: 9 
[4] 4的幂为: 16    [5] 5的幂为: 25    [6] 6的幂为: 36    
[7] 7的幂为: 49    [8] 8的幂为: 64    [9] 9的幂为: 81    
[10]    10的幂为: 100  [11]    11的幂为: 121  [12]    12的幂为: 144  
[13]    13的幂为: 169  [14]    14的幂为: 196  [15]    15的幂为: 225  
[16]    16的幂为: 256  [17]    17的幂为: 289  [18]    18的幂为: 324  
[19]    19的幂为: 361  [20]    20的幂为: 400  [21]    21的幂为: 441  

所有子进程结束!
'''

回调函数

import time
from concurrent.futures import ThreadPoolExecutor

def func(n):
    time.sleep(1)
    return n*n

def task(m):
    print(f'******{m.result()}*******')

tp = ThreadPoolExecutor(max_workers=3)

for i in range(3):
    tp.submit(func,i).add_done_callback(task)
    
'''
******0*******
******1*******
******4*******
'''

线程池-The End

原文:https://www.cnblogs.com/dadazunzhe/p/11545541.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!