首页 > 编程语言 > 详细

python并发编程之进程池和线程池

时间:2021-07-24 00:22:15      阅读:40      评论:0      收藏:0      [点我收藏+]

1、Python标准模块——concurrent.futures

concurrent.futures模块提供了高度封装的异步调用接口

ThreadPoolExecutor:线程池,提供异步调用

ProcessPoolExecutor:进程池,提供异步调用

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():取消某个任务

3、进程池:ProcessPoolExecutor

    from concurrent.futures import ProcessPoolExecutor
    import os,time,random
    def task(n):
        print(‘%s is runing‘ %os.getpid())
        time.sleep(random.randint(1,3))
        return n**2

    if __name__ == ‘__main__‘:

        executor=ProcessPoolExecutor(max_workers=3)

        futures=[]
        for i in range(11):
            future=executor.submit(task,i)
            futures.append(future)
        executor.shutdown(True)
        print(‘+++>‘)
        for future in futures:
            print(future.result())

4、线程池:ThreadPoolExecutor与进程池方法一样,参考进程池代码
5、map的用法:map取代了for+submit

from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import os,time,random
def task(n):
    print(‘%s is runing‘ %os.getpid())
    time.sleep(random.randint(1,3))
    return n**2

if __name__ == ‘__main__‘:

    executor=ThreadPoolExecutor(max_workers=3)

    # for i in range(11):
    #     future=executor.submit(task,i)

    executor.map(task,range(1,12)) #map取代了for+submit

python并发编程之进程池和线程池

原文:https://www.cnblogs.com/zty78/p/15050541.html

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