zoukankan      html  css  js  c++  java
  • python_并发编程——线程池

    1.线程池

    import time
    from concurrent.futures import ThreadPoolExecutor
    
    
    def func(n):
        time.sleep(2)
        print(n)
    
    
    t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
    for i in range(20):
        t_pool.submit(func,i)    # 启动进程池,(执行的函数,传递的参数)

    结果:每过两秒钟随机打印5个数。

    import time
    from concurrent.futures import ThreadPoolExecutor
    
    
    def func(n):
        time.sleep(2)
        print(n)
    
    
    t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
    for i in range(20):
        t_pool.submit(func,i)    # 启动进程池,(执行的函数,传递的参数)
    t_pool.shutdown()  # 线程池被执行完,才会执行主线程的内容。
    print('主线程!')

    结果:

    2.取出线程池中函数的返回值

    from concurrent.futures import ThreadPoolExecutor
    
    
    def func(n):
        return n*n
    
    
    t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
    t_list = []
    for i in range(20):
        # 接收进程池的返回值
        t = t_pool.submit(func,i)
        # 将返回值添加进列表
        t_list.append(t)
    t_pool.shutdown()  # 线程池被执行完,才会执行主线程的内容。
    print('主线程!')
    for i in t_list:
        print(i.result())  # 用result方法,打印列表中的值

    结果:

     3.进程池

      导入ProcessPoolExecutor模块,方法和线程池一样。

    4.map()方法:

    from concurrent.futures import ThreadPoolExecutor
    import time
    
    
    def func(n):
        time.sleep(2)
        print(n)
    
    
    t_pool = ThreadPoolExecutor(max_workers=5)  # 创建线程池对象,设置线程池大小,建议不超过cpu数*5
    t_pool.map(func,range(20))    # 启动进程池,(执行的函数,传递的参数(可迭代的))

    结果:每过两秒钟随机打印5个数。map方法无法拿到函数的返回值。

    5.回调函数

    from concurrent.futures import ThreadPoolExecutor
    
    
    def func(n):
        return n*n
    
    
    def call_back(m):
        print('回调函数:',m.result())  # m是一个对象,需要用result方法,才能得到值
    
    
    t_pool = ThreadPoolExecutor(max_workers=5)
    t_pool.submit(func,5).add_done_callback(call_back)  # 回调函数(回调函数的函数名)

    结果:

     

  • 相关阅读:
    8月面试题目收录
    html5读取本地文件,图片预览
    Identity Server4资料
    vue与Element实际应用参考
    webpack与vue环境搭建(转载)
    .NET使用Bogus生成大量随机数据(转载)
    Docker笔记:常用服务安装——Nginx、MySql、Redis(转载)
    RabbitMQ操作代码封装
    RSA加密与解密
    .NET CORE编写控制台程序应有的优雅姿势(转载)
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/12141665.html
Copyright © 2011-2022 走看看