线程和进程的操作是由程序触发系统接口,最后的执行者是系统;协程的操作则是程序员。

协程存在的意义:对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,则只使用一个线程,在一个线程中规定某个代码块执行顺序。

协程的适用场景:当程序中存在大量不需要CPU的操作时(IO),适用于协程;

event loop是协程执行的控制点, 如果你希望执行协程, 就需要用到它们。

event loop提供了如下的特性:

  1、注册、执行、取消延时调用(异步函数)
  2、创建用于通信的client和server协议(工具)
  3、创建和别的程序通信的子进程和协议(工具)
  4、把函数调用送入线程池中

协程示例一:

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
协程示例
"""
import asyncio async def test1():
print("test1, starting")
await test2()
print("test1, ending") async def test2():
print("test2 start") loop = asyncio.get_event_loop() #asyncio.get_event_loop() : asyncio启动默认的event loop
loop.run_until_complete(test1()) #run_until_complete() : 这个函数是阻塞执行的,知道所有的异步函数执行完成,
loop.close() #close() : 关闭event loop。

greenlet协程示例:

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
协程示例
"""
import greenlet def fun1():
print("")
f2.switch()
print("")
f2.switch() def fun2():
print("")
f1.switch()
print("") f1 = greenlet.greenlet(fun1)
f2 = greenlet.greenlet(fun2) f1.switch()

gevent协程示例:

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
gevent协程示例
"""
import gevent def fun1():
print("www.baidu.com") #第一步
gevent.sleep(0)
print("end the baidu.com") #第三步 def fun2():
print("www.yusheng.com") #第二步
gevent.sleep(0)
print("end the yusheng.com") #第四步 gevent.joinall([
gevent.spawn(fun1),
gevent.spawn(fun2),
])

示例三:遇到IO操作自动切换:

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
遇到IO操作自动切换:
"""
import gevent
import requests def fun(url):
print("get: %s" % url)
gevent.sleep(0)
data = requests.get(url)
ret = data.text
print(url, len(ret)) gevent.joinall([
gevent.spawn(fun, 'https://www.python.org/'),
gevent.spawn(fun, 'https://www.yahoo.com/'),
gevent.spawn(fun, 'https://github.com/'),
])

python--协程知识初识的更多相关文章

  1. day-5 python协程与I/O编程深入浅出

    基于python编程语言环境,重新学习了一遍操作系统IO编程基本知识,同时也学习了什么是协程,通过实际编程,了解进程+协程的优势. 一.python协程编程实现 1.  什么是协程(以下内容来自维基百 ...

  2. Python协程与Go协程的区别二

    写在前面 世界是复杂的,每一种思想都是为了解决某些现实问题而简化成的模型,想解决就得先面对,面对就需要选择角度,角度决定了模型的质量, 喜欢此UP主汤质看本质的哲学科普,其中简洁又不失细节的介绍了人类 ...

  3. Python 协程总结

    Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是 ...

  4. 终结python协程----从yield到actor模型的实现

    把应用程序的代码分为多个代码块,正常情况代码自上而下顺序执行.如果代码块A运行过程中,能够切换执行代码块B,又能够从代码块B再切换回去继续执行代码块A,这就实现了协程 我们知道线程的调度(线程上下文切 ...

  5. 从yield 到yield from再到python协程

    yield 关键字 def fib(): a, b = 0, 1 while 1: yield b a, b = b, a+b yield 是在:PEP 255 -- Simple Generator ...

  6. 关于python协程中aiorwlock 使用问题

    最近工作中多个项目都开始用asyncio aiohttp aiomysql aioredis ,其实也是更好的用python的协程,但是使用的过程中也是遇到了很多问题,最近遇到的就是 关于aiorwl ...

  7. 用yield实现python协程

    刚刚介绍了pythonyield关键字,趁热打铁,现在来了解一下yield实现协程. 引用官方的说法: 与线程相比,协程更轻量.一个python线程大概占用8M内存,而一个协程只占用1KB不到内存.协 ...

  8. [转载] Python协程从零开始到放弃

    Python协程从零开始到放弃 Web安全 作者:美丽联合安全MLSRC   2017-10-09  3,973   Author: lightless@Meili-inc Date: 2017100 ...

  9. 00.用 yield 实现 Python 协程

    来源:Python与数据分析 链接: https://mp.weixin.qq.com/s/GrU6C-x4K0WBNPYNJBCrMw 什么是协程 引用官方的说法: 协程是一种用户态的轻量级线程,协 ...

  10. python协程详解

    目录 python协程详解 一.什么是协程 二.了解协程的过程 1.yield工作原理 2.预激协程的装饰器 3.终止协程和异常处理 4.让协程返回值 5.yield from的使用 6.yield ...

随机推荐

  1. 微信企业号SDK

    1. 微信企业号SDK class class_wxqiye { var $corpid = CorpID; var $corpsecret = CorpSecret; var $agentid = ...

  2. golang strings常用函数

    package main import ( "fmt" "strings" ) func main() { s1 := " aBc" s2 ...

  3. Python处理数据集-1

    原数据集的数据格式: 每行为:(test_User, test_Item) negativeItem1 negativeItem2 negativeItem3 …… negativeItem99 即每 ...

  4. 关于 Task.Run 简单的示例

    1. 关于 Task.Run 简单的示例01 直接贴代码了: public static class TaskDemo01 { public static void Run() { Console.W ...

  5. 用 ubuntu 自带的 gome-screenshot 来实现类似QQ截图那样的功能,同时设置键盘快捷键

    在window下习惯了使用ctrl+Alt+A截图,在linux还真有点不习惯,所以下面介绍一下替代的用法. 打开 ubuntu 的系统设置-->键盘-->快捷键:界面如下: 01 添加一 ...

  6. 【UOJ#32】【UR #2】跳蚤公路(最短路)

    [UOJ#32][UR #2]跳蚤公路(最短路) 题面 UOJ 题解 不难发现要求的就是是否存在负环.也就是我们只需要找到所有的负的简单环,很容易就可以想到维护路径上和\(x\)相关的内容,即维护一下 ...

  7. (转)WEB页面导出为Word文档后分页&横向打印的方法

    <html>    <HEAD>        <title>WEB页面导出为Word文档后分页&横向打印的方法 </title>    < ...

  8. C#使用post方式提交json数据

    尝试了一天,尝试了各种方法,一下方法最直接方便. //地址 string _url = "https://www.dXXXayup.ink/api/User/Login"; //j ...

  9. dapperDemo

    dapperDemo 下载链接:http://pan.baidu.com/s/1geQHXPT

  10. React学习笔记③

    生命周期的理解 class App extends Component{ constructor(){ console.log("constructor") //初始化属于组件的属 ...