python语法基础-并发编程-协程-长期维护
############### 协程介绍 ##############
"""
协程介绍 # 协程和进程和线程一样都是实现并发的手段, # 协程
# 协程本质上是一个线程,
# 什么是协程:能够在多个任务之间切换来节省一些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语法基础-并发编程-协程-长期维护的更多相关文章
- python语法基础-并发编程-进程-进程理论和进程的开启
############################################## """ 并发编程的相关概念: 进程 1,运行中的程序,就是进程,程序是没有生 ...
- python语法基础-并发编程-进程-进程锁和进程间通信
############### 守护进程 ############## """ 守护进程 父进程中将一个子进程设置为守护进程,那么这个子进程会随着主进程的结束而结束 ...
- python语法基础-并发编程-线程-长期维护
############### 线程和GIL,全局解释器锁 ############## """ 线程 为什么会有进程? 主要是能够同时处理多个任务,多个任务还 ...
- python语法基础-并发编程-线程-线程理论和线程的启动
####################### 线程介绍 ############################## """ 线程介绍 为什 ...
- python语法基础-并发编程-进程-进程池以及回调函数
############### 进程池 ############## """ 进程池的概念 为什么会有进程池? 1,因为每次开启一个进程,都需要创建一个内存空间 ...
- python语法基础-并发编程-进程-其他
############### 多进程的信号量 ############## # 多进程的信号量 from multiprocessing import Process import ti ...
- python语法基础-函数-迭代器和生成器-长期维护
############### 迭代器 ############## """ 迭代器 这是一个新的知识点 我们学习过的可以迭代的对象有哪些? list str ...
- python 并发编程 协程 目录
python 并发编程 协程 协程介绍 python 并发编程 协程 greenlet模块 python 并发编程 协程 gevent模块 python 并发编程 基于gevent模块实现并发的套接字 ...
- 并发编程协程(Coroutine)之Gevent
并发编程协程之Gevent Gevent官网文档地址:http://www.gevent.org/contents.html 基本概念 我们通常所说的协程Coroutine其实是corporate r ...
随机推荐
- MySQL 存储引擎(MyISAM、InnoDB、NDBCluster)
前言 MySQL 的存储引擎可能是所有关系型数据库产品中最具有特色的了,不仅可以同时使用多种存储引擎,而且每种存储引擎和MySQL之间使用插件方式这种非常松的耦合关系. 由于各存储引擎功能特性差异较大 ...
- 微信小程序自定义分享封面
onShareAppMessage:function(options){ let thas = this; if (options.from === 'button') { // 来自页面内转发按钮 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL WHERE 子句
MySQL 表中使用 SQL SELECT 语句来读取数据. 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中. 语法 以下是 SQL SELECT 语句使用 WHERE ...
- pywin32获得tkinter窗口句柄,并在上面绘图
想实现用win32 API在tkinter窗口上画图,那么应该先获得tkinter窗口的句柄hwnd,然后再获得tkinter的设备hdc.尝试了FindWindow(),GetActiveWindo ...
- tensorflow 读取训练集文件 from Hadoop
1.代码配置 filename_queue = tf.train.string_input_producer([ "hdfs://namenode:8020/path/to/file1.cs ...
- mysql字符集配置&mysql中文乱码
问题描述 这两天重置了下自己的电脑系统,一个ubuntu,另外一个当然就是windows. 不过在运行程序的时候发现,出现了很多的"????",也就是乱码字符.毫无疑问,这定然是m ...
- Django的模板变量
变量的值来自context中的数据字典, 类似于字典对象的keys到values的映射关系. 变量是被}}和{{括起来的部分 变量看起来就像是这样: {{ variable }}. 当模版引擎遇到一个 ...
- ubuntu下查询网络的常用命令
1.查看无线路由器(网关)的IP地址 在terminal中输入如下命令,即可查询到当前使用的路由器的IP地址(我电脑是连着一个无线网络还有一个DSL连接): route|grep -i default ...
- 使用pyintaller打包python3.6项目,并用c#调用该脚本
一.pythoninstaller 打包python项目 前提:安装python3.6环境+pycharm 1. 安装pyinstaller pip install pyinstaller 2. cm ...
- UML-如何画顺序图?
1.生命线框图和生命线 生命线:可以为虚线(源于UML1),也可以是实线 2.消息 1).创始消息,实心圆开头2).同步消息,实心箭头 3.执行规格条和控制期 控制期:阻塞调用 4.返回值 5.自身消 ...