# coding=utf-8
import asyncio
import functools
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [*] %(process)d %(processName)s %(message)s"
)
def callback01 (args, *, kwargs="defalut"):
print(f"\t普通函数做为回调函数,获取参数:{args},{kwargs}")
def callback02 (n):
print(f"\t callback02 {n} invoked")
def callback03 (n, loop):
print(f"\t callback03 {n} 运行时间点{loop.time()}")
async def result1 ():
print("\t这是result1协程")
return "result1"
async def result2 (arg):
print("\t这是result2协程")
return f"result2接收了一个参数,{arg}"
async def main (loop):
print("1.主协程------------------------------------------------")
print("\t等待result1协程运行")
res1 = await result1() # 异步阻塞(等待另一个协程)
print("\t等待result2协程运行")
res2 = await result2(res1) # 异步阻塞(等待另一个协程)
await asyncio.sleep(1)
print("2.注册callback01----------------------------------------")
loop.call_soon(callback01, 1)
# 改变函数的默认参数
wrapped = functools.partial(callback01, kwargs="not defalut")
loop.call_soon(wrapped, 2)
await asyncio.sleep(0.1)
print("3.注册callback02----------------------------------------")
loop.call_later(0.2, callback02, 1) # 延时去调用一个函数
loop.call_later(0.1, callback02, 2) # 第一个参数越小,越先执行。
loop.call_soon(callback02, 3) # 会在call_later之前执行,和它的位置在哪无关
await asyncio.sleep(1)
print("4.注册callback03----------------------------------------")
now = loop.time()
print("\t 当前的内部时间(循环时间):", now)
loop.call_at(now + 0.1, callback03, 1, loop) # 第一个参数的含义代表的是一个单调时间
loop.call_at(now + 0.2, callback03, 2, loop)
loop.call_soon(callback03, 3, loop)
await asyncio.sleep(1)
return (res1, res2)
if __name__ == '__main__':
loop = asyncio.get_event_loop()
try:
print("进入事件循环...")
result = loop.run_until_complete(main(loop))
print(f"获取返回值:{result}")
finally:
print("关闭事件循环...")
loop.close()
输出:
进入事件循环...
1.主协程------------------------------------------------
等待result1协程运行
这是result1协程
等待result2协程运行
这是result2协程
2.注册callback01----------------------------------------
普通函数做为回调函数,获取参数:1,defalut
普通函数做为回调函数,获取参数:2,not defalut
3.注册callback02----------------------------------------
callback02 3 invoked
callback02 2 invoked
callback02 1 invoked
4.注册callback03----------------------------------------
当前的内部时间(循环时间): 363699.437
callback03 3 运行时间点363699.437
callback03 1 运行时间点363699.546
callback03 2 运行时间点363699.625
获取返回值:('result1', 'result2接收了一个参数,result1')
关闭事件循环...