• 异步协程模拟


    import time
    
    # def func():
    #     print("我爱凋零")
    #     time.sleep(3)   #让当前线程处于阻塞状态,cpu不为你工作
    #     print("我爱流云")
    #
    # if __name__ == '__main__':
    #     func()
    
    #input()程序处于阻塞状态
    #requests.get()在网络请求返回数据前,程序也是处于阻塞状态
    #一般情况下,程序处于IO操作的时候,程序处于阻塞状态
    
    
    #协程:当程序遇见IO的时候,可以处理其他任务上
    #在微观上是任务之间的切换
    #宏观上是,多个任务在一起执行,这就是
    #多任务异步操作
    
    #这些都是单线程资源
    
    #python编写协程的程序
    # import asyncio
    # async def func():
    #     print("你好")
    #
    #
    # if __name__ == '__main__':
    #     g=func() #此时的函数是异步协程函数,执行结果得到的是一个异步协程对象
    #     print(g)
    #     asyncio.run(g) #协程程序运行需要asyncio模块的支持
    ##########################################################################
    # import asyncio
    # import time
    # async def func1():
    #     print("你好我叫凋零1")
    #     #time.sleep(3)  #当程序出现同步操作时候,异步就中断了 requests.get()和time都是
    #     await asyncio.sleep(3)  # 异步操作代码
    #     print("你好我叫凋零2")
    #
    # async def func2():
    #     print("你好我叫流云1")
    #     #time.sleep(2)
    #     await asyncio.sleep(2)
    #     print("你好我叫流云2")
    #
    # async def func3():
    #     print("你好我叫123")
    #     #time.sleep(4)
    #     await asyncio.sleep(4)
    #     print("你好我叫456")
    #
    # if __name__ == '__main__':
    #     f1=func1()
    #     f2=func2()
    #     f3=func3()
    #     tasks=[f1,f2,f3]
    #     t1=time.time()
    #     #一次性启动多个任务(协程)
    #     asyncio.run(asyncio.wait(tasks))  #同步操作
    #     t2=time.time()
    #     print(t2-t1)
    
    ##################################推荐写法########
    # import asyncio
    # import time
    # async def func1():
    #     print("你好我叫凋零1")
    #     #time.sleep(3)  #当程序出现同步操作时候,异步就中断了 requests.get()和time都是
    #     await asyncio.sleep(3)  # 异步操作代码
    #     print("你好我叫凋零2")
    #
    # async def func2():
    #     print("你好我叫流云1")
    #     #time.sleep(2)
    #     await asyncio.sleep(2)
    #     print("你好我叫流云2")
    #
    # async def func3():
    #     print("你好我叫123")
    #     #time.sleep(4)
    #     await asyncio.sleep(4)
    #     print("你好我叫456")
    #
    # async def main():
    #     #第一种写法
    #     # f1=func1()
    #     # await f1 #一般wait挂起操作放在协程对象前面
    #     #第二种写法
    #     tasks=[
    #         func1(),func2(),func3()
    #     ]
    #     await asyncio.wait(tasks)
    #
    #
    # if __name__ == '__main__':
    #     asyncio.run(main())
    #     t1=time.time()
    #     #一次性启动多个任务(协程)
    #     asyncio.run(main())  #同步操作
    #     t2=time.time()
    #     print(t2-t1)
    ##########################################################
    #在爬虫领域的应用
    
    import asyncio
    import time
    async def download(url):
        print("开始准备下载")
        await asyncio.sleep(2)#模拟网络请求不能是requests.get
        print("下载完成")
    
    async def main():
        urls=["https://www.bilibili.com",
              "https://www.baidu.com",
              "https://www.163.com"]
        tasks=[]
        for url in urls:
            d=download(url)
            tasks.append(d)
        await asyncio.wait(tasks)
    if __name__ == '__main__':
        asyncio.run(main())
  • 相关阅读:
    刻舟求剑,
    录制时间是不准确的,
    HIV T2
    DNA RNA
    洛谷 P1428 小鱼比可爱
    Codevs 1081 线段树练习2
    Codevs 1080 线段树联系
    Tarjan算法
    Codevs 2611 观光旅游
    洛谷 1865 A%B问题
  • 原文地址:https://www.cnblogs.com/520520520zl/p/16243122.html
Copyright © 2020-2023  润新知