Python 进程池之阻塞模式

程序1

from multiprocessing import Pool
import time
from random import random
import os
#阻塞式进程

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()))
    # return '完成任务:{}!用时:{},进程ID:{}'.format(task_name,(end - start),os.getpid())

# container = []
#
# def callback_func(n):
#     container.append(n)
#
if __name__ == '__main__':
    pool = Pool(5)
    tasks = ['听音乐','吃饭','洗衣服','打游戏','散步','看孩子','读书','做饭']
    for task1 in tasks:
        pool.apply(task,args = (task1,))

    pool.close()    #添加任务结束
    pool.join()     #

    print('over!!!!!!!')

结果1

开始做任务了! 听音乐
完成任务:听音乐!用时:1.3294446468353271,进程ID:8768
开始做任务了! 吃饭
完成任务:吃饭!用时:1.1084485054016113,进程ID:9416
开始做任务了! 洗衣服
完成任务:洗衣服!用时:0.22160625457763672,进程ID:5820
开始做任务了! 打游戏
完成任务:打游戏!用时:0.27808260917663574,进程ID:16932
开始做任务了! 散步
完成任务:散步!用时:1.8780441284179688,进程ID:1952
开始做任务了! 看孩子
完成任务:看孩子!用时:0.2119889259338379,进程ID:8768
开始做任务了! 读书
完成任务:读书!用时:1.2344746589660645,进程ID:9416
开始做任务了! 做饭
完成任务:做饭!用时:1.924525499343872,进程ID:5820
over!!!!!!!

发现结果前五个进程号ID都不一样,到第六个开始和前面重复
阻塞模式
进程池阻塞式的特点
添加一个任务执行一个任务,如果一个任务不结束,另外一个任务进不来。
(每个客户享受贵宾级待遇)

进程池:
pool= pool(max) 创建进程池对象
pool.apply() 阻塞的
pool.apply_async() 非阻塞的

pool.close()
pool.join()让主进程让步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值