zoukankan      html  css  js  c++  java
  • 用进程池创建子进程

    进程少时,手动单个创建进程;

    进程多时,用进程池创建进程。

    用进程池创建子进程

    from multiprocessing import Pool
    
    import os, time, random
    
    
    def worker(msg):
        t_start = time.time()
        print("%s开始执行,进程号为%d" % (msg, os.getpid()))
        # random.random()随机生成0~1之间的浮点数
        time.sleep(random.randrange(3,5))
        t_stop = time.time()
        print(msg, "执行完毕,耗时%0.2f" % (t_stop - t_start))
    
    if __name__ == '__main__':
    
        po = Pool(3)  # 定义一个进程池,最大进程数3
        for i in range(0, 10):
            po.apply_async(worker, (i,))
    
        print("----start----")
        po.close()  # 关闭进程池,关闭后po不再接收新的请求
        po.join()  # 等待po中所有子进程执行完成,必须放在close语句之后
        print("-----end-----")
    

      

    multiprocessing.Pool常用函数解析:

    • apply_async(func[, args[, kwds]]) :使用非阻塞方式调用func(并行执行,堵塞方式必须等待上一个进程退出才能执行下一个进程),args为传递给func的参数列表,kwds为传递给func的关键字参数列表;

    • apply(func[, args[, kwds]]):使用阻塞方式调用func

    • close():关闭Pool,使其不再接受新的任务;

    • terminate():不管任务是否完成,立即终止;

    • join():主进程阻塞,等待子进程的退出, 必须在close或terminate之后使用;

        po.close()  # 关闭进程池,关闭后po不再接收新的请求
        po.join()  # 等待po中所有子进程执行完成,必须放在close语句之后
    

      进程池必须关闭了,子进程才能开始执行。

      进程池,就是主进程所在的地方,必须等待,否则进程池(主进程)不会等待子进程执行,就即开始终止所有子进程。

    在win中,进程池必须创建到

    if __name__ == '__main__':中去
  • 相关阅读:
    How does Android, PHP, SQL, JSON, and Remote Databases work together?
    Gson Json
    Protocol Android
    AsyncTask、多线程及线程通信
    线程-Android
    HTTP请求-Android
    Make Your First Android App
    Git版本控制软件结合GitHub从入门到精通常用命令学习手册
    正向代理设置
    vscode 调试 react 项目
  • 原文地址:https://www.cnblogs.com/andy9468/p/8308933.html
Copyright © 2011-2022 走看看