zoukankan      html  css  js  c++  java
  • python中的进程池和线程池

    Python标准模块-concurrent.futures

    #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)
    回调函数

    使用方法示例

    from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor
    
    import requests
    
    # 给线程池设置最大工作的线程数
    pool = ThreadPoolExecutor(10)
    urls = [
        'http://cms-bucket.nosdn.127.net/2018/10/16/10e36050547445f6b8972daf7373a22'
        '2.jpeg',
        'http://kwcdn.000dn.com/swfs/59/39972xmyj0206/pm.jpg',
        'http://pic-bucket.nosdn.127.net/photo/0008/2018-10-14/DU48KHUS2FKJ0008NOS'
        '.jpg',
        'http://cms-bucket.nosdn.127.net/2018/10/16/b3a3fab2d65a41b79e0764727ae6d17'
        '9.jpeg',
        'http://cms-bucket.nosdn.127.net/2018/10/15/92cbe61fc5ec40ab94f5d2f0ed86771'
        '8.jpeg',
    ]
    
    
    def task(url):
        response = requests.get(url)
        return response
    
    
    # response会传递到call_back的参数中
    def call_back(response):
        # 拿到的是一个future的对象
        # 从对象中取出task中返回的结果
        response.result()
        # 对回调过来的信息进行解析
        pass
    
    
    for url in urls:
        # 使用回调函数能够用返回的结果实时的去解析, 实现异步非阻塞
        pool.submit(task, url).add_done_callback(call_back)
    
    # 如果使用shutdown会等待所有任务执行结束后再去执行主线程中的代码
    # pool.shutdown(True)
  • 相关阅读:
    快速修改elementUI组件样式
    设置占位符颜色!
    缩放屏幕的时候banner被压缩变形!
    less一些用法整理
    CentOS 7 的目录结构介绍
    为什么需要VMware的 快照、克隆?
    虚拟机概述
    Linux的简单介绍
    VMware克隆已安装的虚拟机
    【vim使用】分屏命令、操作分屏
  • 原文地址:https://www.cnblogs.com/louyifei0824/p/9864944.html
Copyright © 2011-2022 走看看