参考:https://www.cnblogs.com/ssyfj/p/9219360.html
Future
asyn.py
# coding=utf-8
import functools
import asyncio
import threading
import time
def getInfo(name):
print("getInfo: name {}".format(name))
def over(fu, name):
fu.set_result("over: finish {}".format(name))
print("over: name = {}, {}".format(name, fu))
async def regCall(allDone, loop):
allDone.add_done_callback(functools.partial(over, name="iam1"))
loop.call_soon(over, "call_soon")
allDone.add_done_callback(functools.partial(over, name="iam2"))
async def deal(loop, allDone):
print("deal: begin")
# allDone.add_done_callback(functools.partial(over, name="i1"))
# def call():
# print("call ----")
# loop.call_soon(over, allDone, "i2")
# t = threading.Timer(5, call)
# t.start()
start = time.time()
star2 = loop.time()
print("start = {}, {}".format(start, star2))
loop.call_later(3, over, allDone, "i4")
print("deal: middle")
result = await allDone
print("end {}".format(time.time()-start))
print("deal: end: {}".format(result))
if __name__ == "__main__":
loop = asyncio.get_event_loop()
try:
allDone = asyncio.Future()
loop.run_until_complete(deal(loop, allDone))
finally:
loop.close()
结果:
deal: begin
start = 1603954495.515313, 101009.515
deal: middle
over: name = i4, <Future finished result='over: finish i4'>
end 3.017853021621704
deal: end: over: finish i4
PS E:\study\py\async>