gg
大神你好,我是一个python小白,恕我刚接触计算机,您的一些回答我都不太明白。一个问题请教一下,我在学到异步io时,看到大神们包括您主流的观点是,当有io时,线程只给发起io系统调用,而系统会立即返回,这是线程就可以运行别的程序,等到系统接受到消息,再把这个主动返回给线程。那么既然asyncio就是异步模型,那么就应该符合异步的特点,我的理解是,一个携程 await 另一个io协程,如果用asyncio.sleep模拟io,那么执行到await asyncio.sleep(0.01)这一句,立马会切换到别的协程运行,而直到asyncio.sleep(0.01)结束,类比于网络io得到消息,在切换回原来的那个携程运行。然而事我测试了下并不是这样,asyncio.sleep(0.01)这个io在很短时间内就完成了,完成以后并没有立即切换回调用这个的携程运行。是我对异步的理解有误吗? import asyncio import time
大神你好,我是一个python小白,恕我刚接触计算机,您的一些回答对于我来说太深奥了我都不大能看懂。
一个问题请教一下,我在学到异步io时,看到大神们包括您主流的观点是,当有io时,线程只发起io系统调用,
而系统会立即返回,这时线程就可以运行别的程序,等到系统接受到消息,再把这个消息主动返回给线程。
那么既然asyncio就是异步模型,那么就应该符合异步的特点,我的理解是,一个携程 await另一个io协程,
如果用asyncio.sleep模拟io,那么执行到await asyncio.sleep(0.01)这一句,立马会切换到别的协程运行,
而直到asyncio.sleep(0.01)结束,类比于网络io得到消息,在切换回原来的那个携程运行。
然而事我测试了下并不是这样,asyncio.sleep(0.01)这个io在很短时间内就完成了,
完成以后并没有立即切换回调用这个的携程运行。是我对异步的理解有误吗?以下是执行代码
import asyncio,time async def func(): print("Hello world!") time.sleep(1) r = await asyncio.sleep(0.01) print(r) loop = asyncio.get_event_loop() funcs=[func() for i in range(200)] tasks = asyncio.gather(funcs) loop.run_until_complete(tasks) #如果以我的推论,那么这段程序应该是在打印了两个Hello world以后立即打印None,因为第一个携程的asyncio.sleep(0.01)的这个模拟io操作已经运行结束了,就应该切换会这个携程里,从而打印None