Python-进程池的阻塞式(不能体现多进程的优势)

Python-进程池的阻塞式


先理解阻塞的概念 , 阻塞: 就是当本任务完成了,才能继续运行,后边的任务需要排队。

阻塞式的进程池的特点:

  • 添加一个任务便执行一个任务,如果一个任务不结束,另一个任务进不来。

进程池:

pool = Pool(max) # 创建进程池对象
pool.apply() 	 # 阻塞式
pool.apply_async() # 非阻塞式

pool.close()
pool.join() # 使主进程让步,主进程不能在进程结束前结束。

阻塞式进程用例:

from multiprocessing import Pool
import time,os

# 非阻塞式进程
from random import random

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 t in tasks:
        pool.apply(task,args=(t,))

    pool.close() # 关闭进程池,不允许继续添加进程
    pool.join() # 等待进程池中的所有进程结束

    print('------'*10)
    print('over!!!!!!!!!!')

输出结果:

开始做任务啦! 听音乐
完成任务:听音乐! 耗时:0.01780390739440918 ,进程ID:37187
开始做任务啦! 看电影
完成任务:看电影! 耗时:0.745894193649292 ,进程ID:37188
开始做任务啦! 读书
完成任务:读书! 耗时:0.6414411067962646 ,进程ID:37189
开始做任务啦! 看报
完成任务:看报! 耗时:0.40169405937194824 ,进程ID:37190
开始做任务啦! 玩游戏
完成任务:玩游戏! 耗时:1.446629285812378 ,进程ID:37191
开始做任务啦! 打篮球
完成任务:打篮球! 耗时:0.1841411590576172 ,进程ID:37187
开始做任务啦! 弹钢琴
完成任务:弹钢琴! 耗时:1.584665060043335 ,进程ID:37188
------------------------------------------------------------
over!!!!!!!!!!

你可能感兴趣的:(Python)