• 19-多进程学习


    • 多进程学习
      • 注意逗号
      • 注意使用进程池
      • 注意使用异步
      • 注意查看任务管理器,多进程是否跑起来
    import multiprocessing
    import time
    
    '''
    进程池、线程池的使用有四种方式:apply_async、apply、map_async、map。其中apply_async和map_async是异步的,也就是启动进程函数之后会继续执行
    后续的代码不用等待进程函数返回。apply_async和map_async方式提供了一写获取进程函数状态的函数:ready()、successful()、get()。
    '''
    
    def func(msg):
        print('msg: ', msg)
        time.sleep(1)
        print('********')
        return 'func_return: %s' % msg
    
    
    if __name__ == '__main__':
        '''
        # apply_async
        print('
    --------apply_async------------')
        pool = multiprocessing.Pool(processes=4)
        results = []
        for i in range(10):
            msg = 'hello world %d' % i
            result = pool.apply_async(func, (msg,))
            results.append(result)
        print('apply_async: 不堵塞')
    
        for i in results:
            i.wait()  # 等待进程函数执行完毕
    
        for i in results:
            if i.ready():  # 进程函数是否已经启动了
                if i.successful():  # 进程函数是否执行成功
                    print(i.get())  # 进程函数返回值
        '''
    
        '''
        # apply
        print('
    --------apply------------')
        pool = multiprocessing.Pool(processes=4)
        results = []
        for i in range(10):
            msg = 'hello world %d' % i
            result = pool.apply(func, (msg,))
            results.append(result)
        print('apply: 阻塞')  # 执行完func才执行该句
        pool.close()
        pool.join()  # join语句要放在close之后
        print(results)
        '''
    
        '''
        # map
        print('
    --------map------------')
        args = [1, 2, 4, 5, 7, 8]
        pool = multiprocessing.Pool(processes=6)
        return_data = pool.map(func, args)
        print('阻塞')  # 执行完func才执行该句
        pool.close()
        pool.join()  # join语句要放在close之后
        print(return_data)
        '''
    
        # map_async
        print('
    --------map_async------------')
        pool = multiprocessing.Pool(processes=6)
        args = [1, 2, 4, 5, 7, 8]
        result = pool.map_async(func, args)
        print('ready: ', result.ready())
        print('不堵塞')
        result.wait()  # 等待所有进程函数执行完毕
    
        if result.ready():  # 进程函数是否已经启动了
            if result.successful():  # 进程函数是否执行成功
                print(result.get())  # 进程函数返回值
    
  • 相关阅读:
    Linux find 用法示例
    PostgreSQL 之 yum安装 postgis 插件
    解决sql中上下左右backspace不能用的方法
    MySQL 之 MySQL数据库的优化
    mysql命令行批量插入100条数据命令
    MySQL 之 MyTop实时监控MySQL
    MySQL 之 mysqlbinlog解析binlog乱码问题解密
    MySQL 之数据库增量数据恢复案例
    Mysql 之多实例 安装以及配置
    mysql 之审计 init-connect+binlog完成审计功能
  • 原文地址:https://www.cnblogs.com/lotuslaw/p/14237593.html
Copyright © 2020-2023  润新知