asyncio标准库1 Hello World
2024-09-27 05:26:40
利用asyncio的event loop,编写和调度协程
coroutine [,kəuru:'ti:n] n. 协程
Simple coroutine(调用1个协程)
import asyncio
async def say(what, when):
await asyncio.sleep(when)
print(what)
loop = asyncio.get_event_loop()
loop.run_until_complete(say('hello world', 1)) # 使用run_until_complete()方法,在协程完成后中断event loop。
loop.close()
Creating tasks(调用多个协程)
import asyncio
async def say(what, when):
await asyncio.sleep(when)
print(what)
loop = asyncio.get_event_loop()
loop.create_task(say('first hello', 2))
loop.create_task(say('second hello', 1))
loop.run_forever() # 使用run_forever()方法,协程会一直运行,不会中断event loop
loop.close()
Stopping the loop
import asyncio
async def say(what, when):
await asyncio.sleep(when)
print(what)
async def stop_after(loop, when):
await asyncio.sleep(when)
loop.stop() # 中断event loop
loop = asyncio.get_event_loop()
loop.create_task(say('first hello', 2))
loop.create_task(say('second hello', 1))
loop.create_task(say('third hello', 4))
loop.create_task(stop_after(loop, 3))
loop.run_forever()
loop.close()
# out:
second hello
first hello
Task was destroyed but it is pending!
task: <Task pending coro=<say() done, defined at e03.py:5> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0x7fed59595a68>()]>>
# 在执行2个任务后,中断event loop,'third hello‘任务由于延迟时间4秒,未能执行。
最新文章
- solr 查询 实例分析
- 15天玩转redis —— 第六篇 有序集合类型
- Azure File
- android 事件监听
- [py]os.walk爬目录&sys.argv灵活获取参数
- AJAX,JSON用户名校验
- hdu-------(1848)Fibonacci again and again(sg函数版的尼姆博弈)
- JS类型(2)_JS学习笔记(2016.10.02)
- [WPF]Binding的Converter和Validator
- eslint常见规则总结
- MySQL备份常用命令总结
- 超级账本fabric原理之gossip详解
- 后台跨域(CORS)
- 一些你可能不熟悉的JS知识点总结
- PHP 服务器及TP5框架遇到的几个错误
- C#--整型与字节数组byte[]之间的转换
- WCF兼容WebAPI输出Json格式数据,从此WCF一举两得
- msf客户端渗透(一):payload利用简单示范
- Java并发编程(2) AbstractQueuedSynchronizer的内部结构
- 改变手机浏览器(iPhone/Android)上文本输入框的默认弹出键盘