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 以往都是纸上谈兵,毕竟事情也都由部门其他小伙伴承 ...
随机推荐
- yolo buffer is too small for requested array
yolo.cfg 与 yolo.weights 版本一定要对应, darknet链接 https://github.com/pjreddie/darknet 下载后在cfg文件夹下找到yolov2的配 ...
- [转帖]SAP一句话入门:Project System
SAP一句话入门:Project System http://blog.vsharing.com/MilesForce/A621279.html 这是SAP ERP入门的最后一篇了. 我们这些死跑龙套 ...
- 1065. 我的日程安排表 I
描述 实现MyCalendar类来存储您的活动. 如果新添加的活动没有重复,则可以添加. 你的类将有方法book(int start,int end). 这代表左闭右开的间隔[start,end)有了 ...
- zTree树形菜单使用实例
在每个节点添加 id 和 pid, id 表示当前节点编号,pid 表示父节点编号 第一步:在页面显示菜单位置,添加 ul设置 class=”ztree” 第二步:开启简单数据格式支持 第三步:编写树 ...
- Flutter之 LimitedBox、Offstage、OverflowBox、SizedBox详解
1. LimitedBox A box that limits its size only when it's unconstrained. 1.1 简介 LimitedBox,通过字面意思,也可以猜 ...
- Python基础知识1-基础语法
pyenv--版本管理工具(后续再补)可参见https://www.jianshu.com/p/8aaf2525fa80 冯诺依曼体系架构 编程基础 语言分类 低级语言到高级语言 高级语言 程序Pr ...
- python爬虫-1
import resquests #import urllib.request from bs4 import BeautifulSoup from collections import Ordere ...
- laravel 守护进程Supervisor的配置
安装Supervisor Supervisor是Linux系统中常用的进程守护程序.如果队列进程queue:work意外关闭,它会自动重启启动队列进程.在Ubuntu安装Supervisor 非常简单 ...
- js 持续访问保持session对象不消失
$(function(){ publicBusi(); }) //实时刷新登录用户信息 function publicBusi(){ setTimeout(publicBusi,1000*60*10) ...
- css 媒体查询 注意点
1, 媒体查询表达式之间还可以用逗号,@media (max-width:800px), print 它表示或的意思 @media (max-width: 800px) OR print; 2, n ...