【发布时间】:2022-01-27 22:47:38
【问题描述】:
在我写的大部分异步协程中,只需要替换函数定义def func() -> async def func() 和sleep time.sleep(s) -> await asyncio.sleep(s)即可。
是否可以将标准python函数转换为异步函数,其中所有time.sleep(s)都转换为await asyncio.sleep(s)?
示例
任务期间的表现
在任务期间衡量绩效
import asyncio
import random
async def performance_during_task(task):
stop_event = asyncio.Event()
target_task = asyncio.create_task(task(stop_event))
perf_task = asyncio.create_task(measure_performance(stop_event))
await target_task
await perf_task
async def measure_performance(event):
while not event.is_set():
print('Performance: ', random.random())
await asyncio.sleep(.2)
if __name__ == "__main__":
asyncio.run(
performance_during_task(task)
)
任务
任务必须用async def 和await asyncio.sleep(s) 定义
async def task(event):
for i in range(10):
print('Step: ', i)
await asyncio.sleep(.2)
event.set()
进入->
简单的任务定义
为了让其他人不用担心异步等。我希望他们能够正常定义任务(例如使用装饰器?)
@as_async
def easy_task(event):
for i in range(10):
print('Step: ', i)
time.sleep(.2)
event.set()
这样它就可以用作异步函数,例如performance_during_task()
【问题讨论】:
-
This 可能值得探索
标签: python asynchronous python-asyncio python-decorators