• 15 python学习笔记-多进程multiprocessing


    上篇介绍了Python的多线程,python的多线程是不能利用多核CPU的,如果想利用多核CPU的话,就得使用多进程。python中多进程使用multiprocessing模块。

    1、python多进程实例如下:

     1 import multiprocessing,time
     2 def down_load():
     3     time.sleep(1)
     4     print("运行完了")
     5 
     6 if __name__ == '__main__':
     7     start_time=time.time()
     8     for i in range(5):
     9         p = multiprocessing.Process(target=down_load) #创建一个进程
    10         p.start() #启动进程
    11     while len(multiprocessing.active_children())!=0:#等待子进程结束,效果同于join
    12         pass
    13     end_time=time.time()
    14     print(multiprocessing.current_process()) #输出当前运行的线程
    15     print(end_time-start_time)
    16     print('end')

    =======================================执行结果========================================

    运行完了
    运行完了
    运行完了
    运行完了
    运行完了
    <_MainProcess(MainProcess, started)>
    1.1728615760803223
    end

    2、进程池pool

    使用进程池可以快速的启动几个进程,进程池的好处的就是它会自动管理进程数,我们只需要给它设置一个最大的值。有新的请求提交到Pool中时,如果池还没有满,那么就会创建一个新的进程用来执行该请求;但如果池中的进程数已经达到指定的最大值,那么该请求就会等待,直到池中有进程结束,才会用之前的进程来执行新的任务。

     1 from multiprocessing import Pool
     2 import os
     3  
     4  
     5 def worker(msg):
     6     print("%s开始执行,进程号为%d" %  (msg,os.getpid()))
     7  
     8 if __name__ == '__main__':
     9     
    10     po = Pool(3)  # 定义一个进程池,最大进程数3
    11     for i in range(0, 10):
    12         # Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
    13         # 每次循环将会用空闲出来的子进程去调用目标
    14         po.apply_async(func=worker,args=(i,))
    15         #第一个func参数指定运行的函数,第二个args是参数,没有参数可以不写
    16     print("----start----")
    17     po.close()  # 关闭进程池,关闭后po不再接收新的请求
    18     po.join()  # 等待po中所有子进程执行完成,必须放在close语句之后
    19     print("-----end-----")
    ================================执行结果===================================

    ----start----
    0开始执行,进程号为238231开始执行,进程号为23824

    2开始执行,进程号为23825
    3开始执行,进程号为23823
    4开始执行,进程号为23824
    5开始执行,进程号为23823
    6开始执行,进程号为23825
    7开始执行,进程号为23824
    8开始执行,进程号为23823
    9开始执行,进程号为23824
    -----end-----

  • 相关阅读:
    Android Studio使用笔记
    Android Material Design之在RecyclerView中嵌套CardView实现
    RR 和RC 幻读问题
    mysql rr和rc区别
    7.2 Database Backup Methods 数据备份方法:
    7.1 Backup and Recovery Types 备份和恢复类型
    Chapter 7 Backup and Recovery 备份和恢复:
    mysqldump 一些参数体验
    (?m) 可以让.去匹配换行
    perl 正则前导字符
  • 原文地址:https://www.cnblogs.com/cocomoly/p/11934502.html
Copyright © 2020-2023  润新知