• 并发编程之协程


    一、线程池和进程池的shutdown

     二、定时器

     三、协程总结介绍

    对于单线程下,我们不可避免程序中出现io操作,但如果我们能在自己的程序中(即用户程序级别,而非操作系统级别)控制单线程下的多个任务能在一个任务遇到io阻塞时就切换到另外一个任务去计算,这样就保证了该线程能够最大限度地处于就绪态,即随时都可以被cpu执行的状态,相当于我们在用户程序级别将自己的io操作最大限度地隐藏起来,从而可以迷惑操作系统,让其看到:该线程好像是一直在计算,io比较少,从而更多的将cpu的执行权限分配给我们的线程。

        协程的本质就是在单线程下,由用户自己控制一个任务遇到io阻塞了就切换另外一个任务去执行,以此来提升效率。为了实现它,我们需要找寻一种可以同时满足以下条件的解决方案:

    # 协程要解决的问题:保存状态+切换
    # yield:生成器,只要函数中有yield关键字,这个函数就是生成器,通过yield可以实现保存状态+切换

     2、gevent模块

     四、asyncio(官方支持的协程的库)

    # import time
    # import asyncio
    #
    # # 把普通函数变成协程函数
    # # 3.5以前这么写
    # @asyncio.coroutine
    # def task():
    #     print('开始了')
    #     yield from asyncio.sleep(1)  #asyncio.sleep(1)模拟io
    #     print('结束了')
    #
    #
    # loop=asyncio.get_event_loop()  # 获取一个时间循环对象#
    #
    # # 协程函数加括号,并不会真正的去执行,它需要提交给loop,让loop循环着去执行
    # # 协程函数列表
    #
    # ctime=time.time()
    # t=[task(),task()]
    # loop.run_until_complete(asyncio.wait(t))
    # loop.close()
    # print(time.time()-ctime)
    
    
    import time
    import asyncio
    from threading import current_thread
    # 表示我是协程函数,等同于3.5之前的装饰器
    async def task():
        print('开始了')
        print(current_thread().name)
        await asyncio.sleep(3)  # await等同于原来的yield from
        print('结束了')
    
    async def task2():
        print('开始了')
        print(current_thread().name)
        await asyncio.sleep(2)
        print('结束了')
    
    loop=asyncio.get_event_loop()
    
    ctime=time.time()
    t=[task(),task2()]
    loop.run_until_complete(asyncio.wait(t))
    loop.close()
    print(time.time()-ctime)

    五、补充虚拟环境

    总结:

    ```python
    1 解决不同项目依赖的模块版本不同的问题
    2 pycharm中创建项目时选择
     -这个虚拟环境可不可以给其他项目使用(取决你是否选择)
        -基于系统解释器当前状态还是纯净状态来创建虚拟环境
    3 装模块:
     -cmd窗口下:pip3 install flask   (装在谁下,你一定要确认好)
        -推荐你们用pycharm:setting---》那一套
        -pycharm下的terminal下装(相当于cmd),比cmd好在,它有个提示
    4 现在用了虚拟环境如何换到系统环境
       
    4 环境变量的作用
     -把一个路径加入到环境变量,以后该路径下的命令,可以再任意位置执行
    ```

    每天逼着自己写点东西,终有一天会为自己的变化感动的。这是一个潜移默化的过程,每天坚持编编故事,自己不知不觉就会拥有故事人物的特质的。 Explicit is better than implicit.(清楚优于含糊)
  • 相关阅读:
    中间件面试总结
    1.angular js 学习网址
    摄影构图
    mybatis学习(四)
    mybatis学习(三)
    mybatis学习(二)
    mybatis 学习(一)
    mysql 使用过程中出现问题
    springboot
    java 关键字
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/13572221.html
Copyright © 2020-2023  润新知