栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python协程获取返回值(四种方式)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python协程获取返回值(四种方式)

一、通过ensure_future获取,本质是future对象中的result方法
import asyncio
from functools import partial

async def talk(name):
	print("talk running!!!")
	await asyncio.sleep(1)
	return f"{name} talk"

async def sleep(work):
	print("sleep running!!!")
	await asyncio.sleep(0.1)
	return f"{work} sleep"

if __name__ == "__main__":
	# 通过ensure_future获取,本质是future对象中的result方法
	loop = asyncio.get_event_loop()
	get_future1 = asyncio.ensure_future(talk("Dog"))
	get_future2 = asyncio.ensure_future(sleep("Cat"))
	loop.run_until_complete(get_future1)
	loop.run_until_complete(get_future2)
	print(get_future1.result())
	print(get_future2.result())

打印结果:

talk running!!!
sleep running!!!
Dog talk
Cat sleep
二、使用loop自带的create_task,获取返回值
import asyncio
from functools import partial

async def talk(name):
	print("talk running!!!")
	await asyncio.sleep(1)
	return f"{name} talk"

async def sleep(work):
	print("sleep running!!!")
	await asyncio.sleep(0.1)
	return f"{work} sleep"

if __name__ == "__main__":
	# 使用loop自带的create_task,获取返回值
	loop = asyncio.get_event_loop()
	task1 = loop.create_task(talk("Dog"))
	task2 = loop.create_task(sleep("Cat"))
	loop.run_until_complete(task1)
	loop.run_until_complete(task2)
	print(task1.result())
	print(task2.result())

打印结果:

talk running!!!
sleep running!!!
Dog talk
Cat sleep
三、使用callback,一旦await地方的内容运行完,就会运行callback
import asyncio
from functools import partial

async def tack(name):
	print("talk running!!!")
	await asyncio.sleep(1)
	return f"{name} talk"

async def sleep(work):
	print("sleep running!!!")
	await asyncio.sleep(0.1)
	return f"{work} sleep"

def callback(value):
	print(f"主动抛出接收返回值:{value}")

if __name__ == "__main__":
	# 使用callback,一旦await地方的内容运行完,就会运行callback
	loop = asyncio.get_event_loop()
	task1 = loop.create_task(tack("Dog"))
	task2 = loop.create_task(sleep("Cat"))
	task1.add_done_callback(callback)
	task2.add_done_callback(callback)
	loop.run_until_complete(task1)
	loop.run_until_complete(task2)
	print(task1.result())
	print(task2.result())
	

打印结果:

talk running!!!
sleep running!!!
主动抛出接收返回值: result='Cat sleep'>
主动抛出接收返回值: result='Dog talk'>
Dog talk
Cat sleep
四、使用partial这个模块向callback函数中传入值
import asyncio
from functools import partial

async def talk(name):
	print("talk running !!!")
	await asyncio.sleep(1)
	return f"{name} talk"

async def sleep(work):
	print("sleep running!!!")
	await asyncio.sleep(0.1)
	return f"{work} sleep"
	
def callback(value):
    print(f"主动抛出接收返回值:{value}")

if __name__ == "__main__":
	# 使用partial这个模块向callback函数中传入值
	loop = asyncio.get_event_loop()
	task1 = loop.create_task(talk("Dog"))
	task2 = loop.create_task(sleep("Cat"))
	task1.add_done_callback(partial(callback))
	task2.add_done_callback(partial(callback))
	loop.run_until_complete(task1)
	loop.run_until_complete(task2)
	print(task1.result())
	print(task2.result())

打印结果:

talk running !!!
sleep running!!!
主动抛出接收返回值: result='Cat sleep'>
主动抛出接收返回值: result='Dog talk'>
Dog talk
Cat sleep
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/864221.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号