• Python 进程池


    进程池:
      每一个进程在启动一个子进程时都会克隆一分数据,并开启额外一份内存空间,如果多次开启子进程,对内存的开销比较大,这里可以通过进程池来控制进程的最大个数,来解决。
     
    进程池中有两个方法:
    • apply #串行
    • apply_async #并行
    回调callback:
      可以启动10台机器批量进行数据库备份,每个进程执行完毕后在数据库内写入一条日志,可以使用回调写入,回调是由主进程执行的,所以只进行一次链接就可以并发帮子进程写入日志,而不需要进行重复的链接。
    # windows下的多进程参数
    # from  multiprocessing import freeze_support
    from  multiprocessing import Pool
    import time,os
    
    def Foo(i):
        time.sleep(2)
        print("in process",os.getpid())
        return i+100
    
    def Bar(arg):
        print('-->exec done:',arg,os.getpid())
    
    # 判断是直接执行这个脚本,就成立
    # 如果是其他文件调用这个脚本就不执行
    if __name__ == '__main__':
    
        # 允许进程池同时放入吴哥进程
        # cpu只会计算这5个,其他进程处于挂起状态
        pool = Pool(processes=5)
    
        for i in range(10):
    
            # 并行执行程序
            # callback=回调 执行玩func在回掉callback
            # 主进程进行回调
            pool.apply_async(func=Foo, args=(i,),callback=Bar)
    
            # 串行执行进程
            #pool.apply(func=Foo, args=(i,))
    
        print('end')
    
        # 关闭pool
        pool.close()
    
        # 注:并行执行时,先close在join。
        # 进程池中进程执行完毕后再关闭,如果注释,那么程序直接关闭。
        pool.join()
     
  • 相关阅读:
    nginx 配置上传文件大小限制
    linux大文件截取某个日期后面的所有内容
    软件架构笔记 五
    软件架构笔记 四
    软甲架构笔记 三
    软件架构笔记 二
    软件架构笔记 一
    c# 生成的没用文件
    c# 两个软件传参
    c# 四则运算出错
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8194531.html
Copyright © 2020-2023  润新知