zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    Xftp6 和 Xshell 6 下载与安装使用
    Oracle 11 安装教程(桌面类)
    Oracle 11 安装 提示环境不满足最低要求解决方案
    FICO年终完全手册
    SAP月结操作讲解
    ABAP-FI常用BAPI
    FB01与F-02的区别(转载)
    SAP应用创新-维护控制表、视图统一路径
    FI 业务
    SAP 财务模块 FI-TV 差旅管理
  • 原文地址:https://www.cnblogs.com/saolv/p/10162968.html
Copyright © 2011-2022 走看看