线程池

线程池的概念:

  使用concurrent模块进行并发编程的

先上简单的代码

import time
from concurrent.futures import ThreadPoolExecutor
from threading import current_thread

def func(i):
    print('thread',i,current_thread())  # 线程ID
    time.sleep(1)
    print('thread %s end'%i)

tp = ThreadPoolExecutor(5) # 开了5个线程
for i in range(20):
    tp.submit(func,i)
tp.shutdown()
print('主线程')

返回值

import time
from concurrent.futures import ThreadPoolExecutor
from threading import current_thread
def func(i):
    print('thread',i,current_thread())  # 线程ID
    time.sleep(1)
    print('thread %s end'%i)
    return i*'*'
tp = ThreadPoolExecutor(5) # 实例化线程池,开了5个线程
ret_l = []
for i in range(20):
    ret = tp.submit(func,i)
    ret_l.append(ret)
for ret in ret_l:
    print(ret.result())
print('主线程')

回调函数

import os
import time
from concurrent.futures import ProcessPoolExecutor
from threading import current_thread as cthread
# 线程池的回调函数 子线程完成的
def func(i):
    print('thread',i,os.getpid())
    time.sleep(1)
    print('thread %s end'%i)
    return i*'*'
def call_back(arg):
    print('call back:',os.getpid())
    print('ret:',arg.result())
if __name__ == '__main__':
    tp = ProcessPoolExecutor(5)
    ret_l = []
    for i in range(20):
        tp.submit(func,i).add_done_callback(call_back)
    print('主线程',os.getpid())
# 回调函数
# 在线程池中 由子线程完成的
# 在进程池中 由主线程完成的
# 线程池
# 实例化线程池 ThreadPoolExecutor 5*cpu_count
# 异步提交任务 submit/map
# 阻塞直到任务完成 shutdown
# 获取子线程的返回值 result
# 回调函数 add_down_callback
原文地址:https://www.cnblogs.com/youhongliang/p/9707972.html