进程池与线程池

进程池,线程池

#1 介绍
concurrent.futures模块提供了高度封装的异步调用接口
ThreadPoolExecutor:线程池,提供异步调用
ProcessPoolExecutor: 进程池,提供异步调用
Both implement the same interface, which is defined by the abstract Executor class.

#2 基本方法
#submit(fn, *args, **kwargs)
异步提交任务

#map(func, *iterables, timeout=None, chunksize=1) 
取代for循环submit的操作

#shutdown(wait=True) 
相当于进程池的pool.close()+pool.join()操作
wait=True,等待池内所有任务执行完毕回收完资源后才继续
wait=False,立即返回,并不会等待池内的任务执行完毕
但不管wait参数为何值,整个程序都会等到所有任务执行完毕
submit和map必须在shutdown之前

#result(timeout=None)
取得结果

#add_done_callback(fn)
回调函数

# done()
判断某一个线程是否完成

# cancle()
取消某个任务
介绍
import os,time
from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor


def task(n):
    print('%s is runing' %os.getpid())
    time.sleep(1)
    return n**2

def callback_func():
    pass

if __name__ == "__main__":
    executor=ThreadPoolExecutor(max_workers=5) # 开5个线程
# executor=ProcessPoolExecutor(max_workers=5) # 开5个进程
    futures=[]
    for i in range(11):
        future=executor.submit(task,i)  # threading.Thread(target=task, args=(i,))
        # future=executor.submit(task,i).add_done_callback(callback_func) 执行回调函数
        futures.append(future)
    print('waiting...!')
    executor.shutdown()  # close()+join()

 

posted @ 2019-02-28 15:15  李小样  阅读(73)  评论(0)    收藏  举报