进程池-阻塞式

阻塞式特点:

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

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()   让主进程让步

 

posted @ 2020-05-13 15:20  GumpYan  阅读(247)  评论(0编辑  收藏  举报