python基础-线程池

1、使用 multiprocessing 库,使用线程池的 apply_async()方法传入任务函数,任务函数的参数

import os
from multiprocessing import Pool
from time import sleep


def task(name):
    print("正在执行{}任务, 进程号:{}".format(name, os.getpid()))
    sleep(1)
    print("{}任务完成,进程号:{}".format(name, os.getpid()))


if __name__ == '__main__':
    # 设置线程数量
    pool = Pool(5)

    tasks = ["打篮球", "打乒乓球", "下军棋", "视频剪辑", "学习", "吃饭", "睡觉"]

    for i in tasks:
        # async全称 asynchronous 异步的
        pool.apply_async(task, args=(i,))

    pool.close()
    # 和close方法联用,主线程运行结束后,子线程继续运行
    pool.join()

2、使用线程池的 apply_async()方法,传入回调函数

import os
from multiprocessing import Pool
from time import sleep


container = []


def task(name):
    # print("正在执行{}任务, 进程号:{}".format(name, os.getpid()))
    sleep(1)
    # print("{}任务完成,进程号:{}".format(name, os.getpid()))
    return "{}任务完成,进程号:{}".format(name, os.getpid())


def callback_func(n):
    container.append(n)


if __name__ == '__main__':
    # 设置线程数量
    pool = Pool(5)

    tasks = ["打篮球", "打乒乓球", "下军棋", "视频剪辑", "学习", "吃饭", "睡觉"]

    for i in tasks:
        # async全称 asynchronous 异步的
        # 注意:这里的 callback= 后面是函数名 callback_func,不能加括号 callback_func()),
        # 否则报错:TypeError: callback_func() missing 1 required positional argument: 'n'
        pool.apply_async(task, args=(i,), callback=callback_func)

    pool.close()
    # 和close方法联用,主线程运行结束后,子线程继续运行
    pool.join()

    for i in container:
        print(i)

3、阻塞式线程池,apply方法

import os
from multiprocessing import Pool
from time import sleep


def task(name):
    print("正在执行{}任务, 进程号:{}".format(name, os.getpid()))
    sleep(1)
    print("{}任务完成,进程号:{}".format(name, os.getpid()))


if __name__ == '__main__':
    # 设置线程数量
    pool = Pool(5)

    tasks = ["打篮球", "打乒乓球", "下军棋", "视频剪辑", "学习", "吃饭", "睡觉"]

    for i in tasks:
        # 阻塞式的参数没有回调函数
        pool.apply(task, args=(i,))

    pool.close()
    pool.join()

4、非阻塞式线程池技术和阻塞式线程池技术的不同点是什么?

(1)非阻塞式用了队列,阻塞式不用队列;
(2)非阻塞式在规定数量内的进程一起执行,阻塞式是排队执行;
(3)非阻塞式更你能体现作用;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值