###############    协程介绍    ##############

"""
协程介绍 # 协程和进程和线程一样都是实现并发的手段, # 协程
# 协程本质上是一个线程,
# 什么是协程:能够在多个任务之间切换来节省一些IO时间,
# 不需要再浪费线程之间的切换了,只需要做程序之间的切换,
# 程序任务之间的切换也是需要消耗时间,但是开销远远小于进程线程之间的切换, 进程是操作系统调度的,
线程是cpu调度的最小的单位
协程本质就是一个线程,就是在线程上面来回切换而已, 进程和线程之间的切换是由操作系统完成,
协程任务之间的切换是由代码完成的, 对比操作系统控制线程的切换,用户在单线程内控制协程的切换
优点如下:
#1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级
#2. 单线程内就可以实现并发的效果,最大限度地利用cpu
缺点如下:
#1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
#2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程 # 协程:
# c和c++,没有协程的概念,但是python有,
# 这个协程,比线程,进程更加的简单,使用的时候是非常简单的,但是想要明白协程的这个过程,是比较复杂的,
# 使用gevent来实现协程,想要明白gevent就要明白greenlet,想要明白greenlet就要明白yield,
想要明白yield就要明白生成器,想要明白生成器,就要明白迭代器, """

 ###############    协程介绍    ##############

# from greenlet import greenlet
# # 这个模块可以实现协程的多个任务的切换,
# # 这个greenlet就是真正的协程模块,
#
# def eat():
# print("eat start")
# g2.switch()
# print("eat end")
#
#
# def play():
# print("play start")
# g1.switch()
# print("play end")
#
#
# g1 = greenlet(eat) # 注册,
# g2 = greenlet(play)
# g1.switch() # 切换
# g2.switch() """
eat start
play start
eat end
play end
这就是实现了协程之间的切换 """ # 我们在工作中会使用进程,线程,协程来提高代码的并发效果,
# 最多可以启动500个协程
# 假设是4核cpu,
# 可以开5个进程,20个线程,500个协程,就是5万个,就是允许5万个并发

 ###############    协程介绍    ##############

from gevent import monkey;

monkey.patch_all()  # 引入了这个就可以识别time.sleep了,这个必须写到最上面,
import gevent
import time def eat():
print("eat start")
time.sleep(1)
print("eat end") def play():
print("play start")
time.sleep(1)
print("play end") g1 = gevent.spawn(eat) # 开启
g2 = gevent.spawn(play) g1.join()
g2.join() """
你使用的时候,只需要把你的函数代码注册一下,然后就不需要管了,
遇到IO了之后,会自动切换到另外一个任务去执行,然后再次回来,
这样利用IO的时间,进入了IO(time.sleep(1))了之后不会停下来,会切换到其他的任务,然后第一个任务IO之后就切换回来,继续执行,
协程的切换就是gevent来实现的, """

 ###############    协程介绍    ##############

python语法基础-并发编程-协程-长期维护的更多相关文章

  1. python语法基础-并发编程-进程-进程理论和进程的开启

    ############################################## """ 并发编程的相关概念: 进程 1,运行中的程序,就是进程,程序是没有生 ...

  2. python语法基础-并发编程-进程-进程锁和进程间通信

    ###############   守护进程  ############## """ 守护进程 父进程中将一个子进程设置为守护进程,那么这个子进程会随着主进程的结束而结束 ...

  3. python语法基础-并发编程-线程-长期维护

    ###############   线程和GIL,全局解释器锁    ############## """ 线程 为什么会有进程? 主要是能够同时处理多个任务,多个任务还 ...

  4. python语法基础-并发编程-线程-线程理论和线程的启动

    #######################       线程介绍         ############################## """ 线程介绍 为什 ...

  5. python语法基础-并发编程-进程-进程池以及回调函数

    ###############   进程池    ############## """ 进程池的概念 为什么会有进程池? 1,因为每次开启一个进程,都需要创建一个内存空间 ...

  6. python语法基础-并发编程-进程-其他

    ###############    多进程的信号量    ############## # 多进程的信号量 from multiprocessing import Process import ti ...

  7. python语法基础-函数-迭代器和生成器-长期维护

    ###############    迭代器    ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...

  8. python 并发编程 协程 目录

    python 并发编程 协程 协程介绍 python 并发编程 协程 greenlet模块 python 并发编程 协程 gevent模块 python 并发编程 基于gevent模块实现并发的套接字 ...

  9. 并发编程协程(Coroutine)之Gevent

    并发编程协程之Gevent Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate r ...

随机推荐

  1. C++ 模板练习1

    //特定的模板友元关系 #include "stdafx.h" #include <iostream> using namespace std; template< ...

  2. pytorch安装及基本用法

    20180425更新  安装pytorch0.4.0: conda uninstall pytorch # 如果是CUDA版本的话 conda uninstall cuda80 cuda90 # 如果 ...

  3. 2018CCPC吉林赛区 hdu6555~hdu6566

    2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std; typedef long lo ...

  4. Delphi流的操作_文件合并

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  5. WGAN将数值限制在一定范围内 Python代码 tf.clip_by_value(p, -0.01, 0.01))

    tf.clip_by_value(p, min, max))   运用的是交叉熵而不是二次代价函数. 功能:可以将一个张量中的数值限制在(min,max)内.(可以避免一些运算错误:可以保证在进行lo ...

  6. Fidder IOS抓包

    Fiddler-HTTPS配置 手机抓包配置 手机网络配置 打开Safari浏览器输入IP+端口号:192.168.0.14:8888,安装证书 证书信任设置:通用 - 关于本机 - 证书信任设置 - ...

  7. WAMP常用环境配置

    自定义网站目录 修改目录位置 如下图,打开httpd.conf文件. 查找DocumentRoot(两处),做如下修改: #demo为自定义网站目录,下面不再说明 DocumentRoot " ...

  8. javaweb学习——会话技术(二)

    文中部分借鉴了:https://www.cnblogs.com/xdp-gacl/p/3855702.html https://blog.csdn.net/p744174529/article/det ...

  9. python编程:从入门到实践----第六章:字典>练习

    6-1 人:使用一个字典来存储一个熟人的信息,包括名.姓.年龄和居住的城市.该字典应包含键first_name .last_name .age 和city .将存储在该字典中的每项信息都打印出来. f ...

  10. 关于maven的使用总结

    maven介绍 项目构建过程 eclipse只是开发工具,虽然提供了创建.编码.编译.测试.运行等功能,但并不是项目构建工具. 项目构建主要过程如下: 实际的项目构建过程要复杂繁琐的多.如果是一个独立 ...