Python学习day1 初识python&环境安装
1.协程概念
能够在一个线程下的多个任务之间来回切换,那么每一个任务就是协程

进程和线程的切换是由操作系统控制切换
协程和线程
#共同点:
-线程和协程的创建,切换销毁都需要时间开销,
-在cpython中线程和协程都不能利用多个cpu(只能并发)
#不同点:
-多线程线程的切换是由操作系统完成,而协程的切换是通过代码实现,操作系统不可见
-多线程创建,切换销毁时间开销较大,协程的时间开销很小,携程切换用户可操作性,不会增加操作系统压力
2.协程操作(模块)
线程切换
两种切换方式
两种切换方式
# 原生python完成 yield asyncio
# C语言完成的python模块 greenlet gevent原生python代码实现 (asyncos 模块)- asyncos利用yield记录线程代码执行状态和位置,但是yield不能规避io操作
C语言完成的PYthon模块(#greenlet模块)
规避IO操作,切换原理(了解)

2.1 gevent 第三方模块
基本格式
import time
import gevent
from gevent import monkey
monkey.patch_all() #用mokey模块使协程识别多次使用的外部方法,比如time.time()
def eat():
print('wusir is eating')
time.sleep(1)
print('wusir finished eat')
def sleep():
print('小马哥 is sleeping')
time.sleep(1)
print('小马哥 finished sleep')
# g1 = gevent.spawn(eat) # 创造一个协程任务
# g2 = gevent.spawn(sleep) # 创造一个协程任务
# print(g1.value)
# print(g2.value)
# # g1.join() # 阻塞 直到g1任务完成为止
# # g2.join() # 阻塞 直到g1任务完成为止
# gevent.joinall([g1,g2,g3]) #知道列表内的协程任务全部终止为止
g_l = []
for i in range(10):
g = gevent.spawn(eat)
g_l.append(g)
gevent.joinall(g_l)接收返回值
value
# g1 = gevent.spawn(eat) # 创造一个协程任务
# g2 = gevent.spawn(sleep) # 创造一个协程任务
# print(g2.value)
2.2 asyncio 内置模块(记住启动一个/多个线程)
async-异步 sync-同步
asyncio 协程基本格式
#起一个任务
import asyncio #插入asyncio模块
async def demo(): #创建async函数
print('start')
await asyncio.sleep(1) #阻塞,阻塞必须写入await之后 且使用asyncio模块自己的方法
print('end')
loop = asyncio.get_event_loop() #创建一个第三方事件循环,监测是否IO
loop.run_until_complete(demo()) #吧demo任务丢到事件循环中去执行
#起多个任务,且没有返回值
import asyncio
async def demo():
print('start')
await asyncio.sleep(1) #阻塞,阻塞必须写入await之后 且使用asyncio模块自己的方法
print('end')
loop = asyncio.get_event_loop()
wait_obj=asyncio.wait([demo(),demo(),demo()])
loop.run_until_complete(wait_obj)
#起多个任务,有返回值,可以绑定回调函数
import asyncio
asrnc def demo():
print('start')
await asyncio.sleep(1) #阻塞,阻塞必须写入await之后 且使用asyncio模块自己的方法
print('end')
retunrn 123
loop = asyncio.get-event_loop()
t1 = loop.create_task(demo())
t2 = loop.create_task(demo())
tasks=[t1,t2]
wait_obj=asyncio.wait([t1,t2])
loop.run_until_complete(wait_obj)
for i in easks:
print(tasks.result())
asyncos是python原生的底层的协程模块
爬虫,webserver框架
爬虫网络编程的效率和并发效果
await 阻塞必须写在await之后,告诉协程函数这里要切换出去,还能保证一会再切回来
await 必须写在async函数里,async是协程函数
loop 时间循环
所有的协程的执行,调度都离不开这个loop
Python学习day1 初识python&环境安装的更多相关文章
- python学习之简介与环境安装
		
[转自]http://www.cnblogs.com/wupeiqi/articles/5433925.html --Python可以应用于众多领域 如:数据分析.组件集成.网络服务.图像处理.数值计 ...
 - python入门灵魂5问--python学习路线,python教程,python学哪些,python怎么学,python学到什么程度
		
一.python入门简介 对于刚接触python编程或者想学习python自动化的人来说,基本都会有以下python入门灵魂5问--python学习路线,python教程,python学哪些,pyth ...
 - python学习第一讲,python简介
		
目录 python学习第一讲,python简介 一丶python简介 1.解释型语言与编译型语言 2.python的特点 3.python的优缺点 二丶第一个python程序 1.python源程序概 ...
 - 孤荷凌寒自学python第二十一天初识python的类
		
孤荷凌寒自学python第二十一天初识python的类 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 类是面向对象的编程语言非常重要的概念. 编程语言的进化史中从顺序编程到结构化编程,最后才 ...
 - python学习第九讲,python中的数据类型,字符串的使用与介绍
		
目录 python学习第九讲,python中的数据类型,字符串的使用与介绍 一丶字符串 1.字符串的定义 2.字符串的常见操作 3.字符串操作 len count index操作 4.判断空白字符,判 ...
 - python学习第五讲,python基础语法之函数语法,与Import导入模块.
		
目录 python学习第五讲,python基础语法之函数语法,与Import导入模块. 一丶函数简介 1.函数语法定义 2.函数的调用 3.函数的文档注释 4.函数的参数 5.函数的形参跟实参 6.函 ...
 - python学习第三讲,python基础语法之注释,算数运算符,变量.
		
目录 python学习第三讲,python基础语法之注释,算数运算符,变量. 一丶python中的基础语法,注释,算数运算符,变量 1.python中的注释 2.python中的运算符. 3.pyth ...
 - Python学习教程(Python学习视频_Python学些路线):Day06 函数和模块的使用
		
Python学习教程(Python学习视频_Python学些路线):函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. $$x_1 + x_2 + x ...
 - ELK-6.5.3学习笔记–elk基础环境安装
		
本文预计阅读时间 13 分钟 文章目录[隐藏] 1,准备工作. 2,安装elasticsearch. 3,安装logstash. 4,安装kibana 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...
 
随机推荐
- 微信QQ打开网页时提示用浏览器打开
			
微信QQ打开网页时提示用浏览器打开 一,需求分析 1.1,使用微信或QQ打开网址时,无法在微信或QQ内打开常用下载软件,手机APP等.故此需要在微信qq里提示 二,功能实现 2.1 html实现 &l ...
 - Vue+min-width实现最大两栏布局
			
<style> .fitting-Modal-details{ overflow: hidden; } .detailsContent{ float: left; min-width: 5 ...
 - laravel门面和服务提供者使用
			
关于laravel门面和服务提供者使用的一点见解,门面之词,不足之处,还请多多指教. 在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel ...
 - Java遍历HashMap并修改(remove)(转载)
			
遍历HashMap的方法有多种,比如通过获取map的keySet, entrySet, iterator之后,都可以实现遍历,然而如果在遍历过程中对map进行读取之外的操作则需要注意使用的遍历方式和操 ...
 - [转帖]cmd批处理常用符号详解
			
cmd批处理常用符号详解 https://www.jb51.net/article/32866.htm 很多符号 还是不清楚的.. 批处理能够极大的提高 工作效率 需要加强深入学习. 1.@一般在 ...
 - [转帖]Huge Page 是否是拯救性能的万能良药?
			
Huge Page 是否是拯救性能的万能良药? 本文将分析是否Huge Page在任何条件下(特别是NUMA架构下)都能带来性能提升. 文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢 ...
 - C# Note28: Dispatcher类
			
在项目中也是经常用到: 刚见到它时,你会想:为什么不直接使用System.Windows命名空间下的MessageBox类,何必要这么麻烦?(认真分析看它做了什么,具体原因下面解释) 主要介绍的方法: ...
 - 报错:ch.qos.logback.core.joran.spi.JoranException
			
项目中使用了maven. 1.找到本地仓库,删除ch文件夹 2.对项目执行maven install 3.在更新下项目maven update
 - delphi 子窗体只能最小化不能关闭的解决方案
			
cnpack下载地址:http://www.cnpack.org/showdetail.php?id=726&lang=zh-cn 时候创建的子窗体不能关闭,点关闭按钮时子窗体最小化了. 出现 ...
 - Linq:使用Take和Skip实现分页
			
Skip,Take: list = list.Skip(pageNum * pageSize).Take(pageSize).ToList(); pageSize :表示一页多少条. pageNum: ...