• 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
    
    
  • 相关阅读:
    如何使用jackson美化输出json/xml
    使用Jackson在Java中处理JSON
    用 Jackson 来处理 JSON
    writeValueAsString封装成工具类
    周鸿袆:360回归是出于国家安全考虑(硬件有硬件独特的规律,硬件不可能有很高的利润,核心的价值还是硬件背后承载的软件和云端的服务)
    Unicode 7.0.1中文支持非常好
    六个编程范型将改变你对编程的看法(好多奇怪的语言和奇怪的想法)
    delphi多版本安装方法
    UAC就不能一次添加、永久信任吗?
    数学符号及读法大全
  • 原文地址:https://www.cnblogs.com/saolv/p/10162968.html
Copyright © 2020-2023  润新知