zoukankan      html  css  js  c++  java
  • 进程池-阻塞式

    阻塞式特点:

    添加一个任务,就执行一个任务,如果一个任务不结束,下一个任务就不会被添加进来

    import os
    from multiprocessing import Process, Pool
    from random import random
    import time
    
    
    def task(task_name):
        print('开始做任务', task_name)
        start = time.time()
        # 使用sleep
        time.sleep(random()*2)
        end = time.time()
        print('完成任务:{}!用时:{},进程id:{}'.format(task_name, (end-start), os.getpid()))
    
    
    if __name__ == '__main__':
        pool = Pool(5)
        tasks = ['听音乐', '吃饭', '洗衣服', '打游戏', '散步', '看孩子', '做饭']
        for task1 in tasks:
            pool.apply(task, args=(task1,))  # 维持执行的进程总数为processes,当一个进程执行完毕后会添加新的进程进去
        pool.close()
        pool.join()   # 调用join之前,先调用close函数,否则会出错。执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
        print('over!')
    

      

     总结:

    进程池:

    pool = Pool(processes=n)   创建进程池对象

    pool.apply()   阻塞的

    pool.apply_async()  非阻塞的

    pool.close()

    pool.join()   让主进程让步

  • 相关阅读:
    输出乘数
    输出三角形---编程小记,跟答案不一样但是效果一样,自己动脑子想的,开心
    python collection
    python 之购物车
    python之计算器
    python学习笔记
    724.中心索引
    495.提莫队长
    342.4的幂
    657.机器人能否返回原点
  • 原文地址:https://www.cnblogs.com/GumpYan/p/12882546.html
Copyright © 2011-2022 走看看