为了更好的演示,我准备了三个函数,一个同步的函数,两个异步的函数
# 定义阻塞的函数 def ping(url): print("阻塞函数开始运行") time.sleep(2) os.system("ping %s"%url) print("阻塞函数运行结束") # 定义两个异步函数 async def asyncfunc1(): print("Suspending func1") await asyncio.sleep(1) print("func func1 ", threading.current_thread()) print('Resuming func1') return "func1" async def asyncfunc2(): print("Suspending func2") await asyncio.sleep(1) print("func func2 ", threading.current_thread()) print('Resuming func2') return "func2"
协程中控制任务
单个协程任务的运行
上面的函数,比如说我只想将asyncfunc1() 函数运行并且得结果,可以使用 loop.create_task()
方法创建一个task对象,task是Futures的子类,当调用 loop.run_until_complete()
以后,协程跑完以后,通过 task.result()
获取协程函数的返回结果。
async def asyncfunc1(): print("Suspending func1") await asyncio.sleep(1) print("func func1 ", threading.current_thread()) print('Resuming func1') return "func1" if __name__=="__main__": print("In main thread ",threading.current_thread()) loop = asyncio.get_event_loop() task = loop.create_task(asyncfunc1()) loop.run_until_complete(task) print("task result is ",task.result())
输出结果为
In main thread <_mainthread(mainthread, started="" 6140)=""> Suspending func1 func func1 <_mainthread(mainthread, started="" 6140)=