zoukankan      html  css  js  c++  java
  • Python多进程之Pool进程池浅析

    当要进行CPU密集型任务,推荐使用python多进程;反之如果是IO密集型任务,推荐python多线程。

    下面采用进程池pool讲解代码写法:

    import multiprocessing
    import time
    import os

    if __name__ == '__main__':
    processing_pool()

    def processing_pool():
    # 在进程池中准备 2 个进程
    pool = multiprocessing.Pool(2)

    # 共有 4 个任务要执行
    # 2 个进程要去执行 4 个任务,进程数是不够的
    # 进程池的机制为,当一个进程执行完任务后将重新回到进程池中备用
    # 如果还有任务要执行,那么就从进程池中拿出空闲的进程使用
    for i in range(4):
    pool.apply_async(run, args=(i, ))
    # 先关闭进程池,意思为进程池不再接受新的任务
    pool.close()
    # 将进程加入到主进程中,防止子进程尚未结束,主进程已经执行完,导致杀死子进程。
    # 如果没有 pool.join(),那么主进程在执行完 pool.close() 后其代码结束,所以主进程会关闭。
    # 而加入 pool.join() 意味着子进程的代码也算在主进程代码内,子进程没完,则主进程也没完
    # 此时主进程会等待子进程结束后再结束。
    pool.join()


    def run(i):
    print(f"job_id:{i}")
    # 当 n==3 时,当前进程任务执行完毕
    for n in range(3):
    time.sleep(0.5)
    print(f"p_id:{i} n:{n+1}")
    print(f"job_id:{i} ----- stop! ")

    执行结果为:

    job_id:0
    job_id:1
    p_id:0 n:1
    p_id:1 n:1
    p_id:0 n:2
    p_id:1 n:2
    p_id:0 n:3
    job_id:0 ----- stop!
    job_id:2
    p_id:1 n:3
    job_id:1 ----- stop!
    job_id:3
    p_id:2 n:1
    p_id:3 n:1
    p_id:2 n:2
    p_id:3 n:2
    p_id:2 n:3
    job_id:2 ----- stop!
    p_id:3 n:3
    job_id:3 ----- stop!

  • 相关阅读:
    假期编程
    VC++ MFC Progress Control 进度条
    MFC禁止窗口最大化按钮和禁止改变窗口大小
    VC++ MFC CheckBox
    VC++ 复制整个文件夹
    VS2010 MFC 动态编译以静态编译发布
    VC++ 注册表
    VC++ 删除文件夹
    VC++ MFC 文件处理ANSI
    VC++ MFC Form界面创建和修改总结
  • 原文地址:https://www.cnblogs.com/wangjunjiehome/p/15657302.html
Copyright © 2011-2022 走看看