python 线程池 异步调用与回调机制

#提交任务的两种方式

#1、同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果,再执行下一行代码,导致程序是串行执行

#线程池
from concurrent.futures import ThreadPoolExecutor
import time
import random

def mai(name):
    print('%s is mai' %name)
     # 买的结果不一样
    time.sleep(random.randint(3,5))
      #随机长度,每个人的量不一样
    res=random.randint(7,13)*'#'
    #这是字典
    return {'name':name,'res':res}

  #称重量
def weigh(shit):
    name=shit['name']
    size=len(shit['res'])
    print('%s 买了 《%s》kg' %(name,size))


if __name__ == '__main__':
    #参赛人数
    pool=ThreadPoolExecutor(13)
    #往线程池里面提交任务,谁去买,买的东西秤一秤
    shit1=pool.submit(mai,'nihao').result()
    weigh(shit1)

    shit2=pool.submit(mai,'buqingchu').result()
    weigh(shit2)

    shit3=pool.submit(mai,'buzhidao').result()
    weigh(shit3)

在这里插入图片描述

#2、异步调用:提交完任务后,不地等待任务执行完毕,

from concurrent.futures import ThreadPoolExecutor
import time
import random

def la(name):
    print('%s is laing' %name)
    time.sleep(random.randint(3,5))
    res=random.randint(7,13)*'#'
    return {'name':name,'res':res}


def weigh(shit):
	#这是拿到结果,不用等的效果
    shit=shit.result()
    name=shit['name']
    size=len(shit['res'])
    print('%s 拉了 《%s》kg' %(name,size))


if __name__ == '__main__':
    pool=ThreadPoolExecutor(13)
    #谁拉完自己去调用称重的方法   add_done_callback()前面的任务运行完毕,这是回调函数自动触发(当参数自动穿进去)
    pool.submit(la,'nihao').add_done_callback(weigh)

    pool.submit(la,'buqingchu').add_done_callback(weigh)

    pool.submit(la,'buzhidao').add_done_callback(weigh)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值