【并发编程】进程池/线程池/协程
并发编程(四) »>思维导图> »博客园**** 进程池与线程池 什么是池?在保证计算机硬件安全的情况下最大限度的利用计算机 池其实是降低了程序的运行效率 但是保证了计算机硬件的安全 (硬件的发展跟不上软件的速度) p = ThreadPoolExecutor()创建线程池,括号内可以传参数指定线程池内的线程个数,也可以不传,不传默认是当前所在计算机的cpu个数乘5 p = ProcessPoolExecutor()创建进程池,默认是当前计算机cpu的个数 池子中创建的进程/线程创建一次就不会再创建了,至始至终用的都是最初的那几个,这样的话节省了反复开辟进程/线程的资源 concurrent.futures 模块提供异步执行回调高层接口 异步执行可以由 ThreadPoolExecutor 使用线程或由 ProcessPoolExecutor 使用单独的进程来实现。 两者都是实现抽像类 Executor 定义的接口。 p.submit(fn, *args, **kwargs)朝池子提交任务,异步提交 调度可调用对象 fn,以 fn(*args **kwargs) 方式执行并返回 Future 对像代表可调用对象的执行。 p.shutdown(wait=True)关闭池子 #等待池子中所有的任务执行完毕之后 才会往下运行代码 ThreadPoolExecutor 是 Executor 的子类,它使用线程池来异步执行调用。 ProcessPoolExecutor 是 Executor 的子类,它使用进程池来实现异步执行调用。 ProcessPoolExecutor 使用 multiprocessing 回避 Global Interpreter Lock 但也意味着只可以处理和返回可序列化的对象。 main 模块必须可以被工作者子进程导入。这意味着 ProcessPoolExecutor 不可以工作在交互式解释器中。 异步回调 提交任务的方式 同步:提交任务之后 原地等待任务的返回结果 期间不做任何事 异步:提交任务之后 不等待任务的返回结果(异步的结果怎么拿???) 直接执行下一行代码 异步回调机制:当异步提交的任务有返回结果之后,会自动触发回调函数的执行 result()原地等待任务的返回结果 p.submit(fn,*args, **kwargs).add_done_callback(fn)提交任务的时候 绑定一个回调函数 一旦该任务有结果 立刻执行对于的回调函数 ...