Python之进程池【非阻塞式&阻塞式】(8)

非阻塞式:

(1)全部添加到队列中,立刻返回,并没有等待其他进程执行完毕;

(2)回调函数等待进程任务完成才调用;

from multiprocessing import Pool
import os
import time
from random import random

def task(task_name):
    print("开始做任务了!", task_name)
    start = time.time()
    # 休眠
    time.sleep(random())
    end = time.time()
    return "完成任务:{}!用时:{},进程id:{}".format(task_name, (end - start), os.getpid())

container = []
def callback_func(n):
    return container.append(n)


if __name__ == '__main__':
    pool = Pool(5)
    tasks = ["python1", "python2", "python3", "python4", "python5", "python6", "python7", "python8"]
    for task1 in tasks:
        pool.apply_async(task, args=(task1,), callback=callback_func)

    pool.close()
    pool.join()

    for c in container:
        print(c)

    print("结束!!!")

阻塞式:

(1)并没有体现进程的有点;

(2)添加一个执行一个,新的任务执行必须等待当前的任务完成;

from multiprocessing import Pool
import os
import time
from random import random


def task(task_name):
    print("开始做任务了!", task_name)
    start = time.time()
    # 休眠
    time.sleep(random())
    end = time.time()
    print("完成任务:{}!用时:{},进程id:{}".format(task_name, (end - start), os.getpid()))


if __name__ == '__main__':
    pool = Pool(5)
    tasks = ["python1", "python2", "python3", "python4", "python5", "python6", "python7", "python8"]
    for task1 in tasks:
        pool.apply(task, args=(task1,))
    pool.close()
    pool.join()
    print("结束!!!")

以上内容属于python进阶比较经典的教程,欢迎大家补充。如果你觉得不错,欢迎关注我置顶的公众号:shenbianshi88

你的支持,是我进步的最大动力,编程人生,快乐分享,欢迎你我,共同进步。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值