异步调用与回调机制
Posted fmgao-technology
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步调用与回调机制相关的知识,希望对你有一定的参考价值。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2018/6/19 14:05
# @File : 异步调用与回调机智.py
# 1、同步调用:提交完任务后,就在原地等待任务执行完毕,拿到结果,在执行下一行代码,导致程序串行执行
# 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):
# name = shit[‘name‘]
# size = len(shit[‘res‘])
# print(‘%s la l <%s> kg‘ % (name, size))
#
#
# if __name__ == ‘__main__‘:
# pool = ThreadPoolExecutor(13) # 限制池中数量
# shit1 = pool.submit(la, ‘alex‘).result()
# weigh(shit1)
#
# shit2 = pool.submit(la, ‘wupeiqi‘).result()
# weigh(shit2)
#
# shit3 = pool.submit(la, ‘yuanhao‘).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 la l <%s> kg‘ % (name, size))
if __name__ == ‘__main__‘:
pool = ThreadPoolExecutor(13) # 限制池中数量
pool.submit(la, ‘alex‘).add_done_callback(weigh) # 前面任务执行完毕,自动触发weigh函数,把前面对象(pool.submit(la, ‘alex‘))传入
pool.submit(la, ‘wupeiqi‘).add_done_callback(weigh)
pool.submit(la, ‘yuanhao‘).add_done_callback(weigh)
以上是关于异步调用与回调机制的主要内容,如果未能解决你的问题,请参考以下文章