Gevent:

Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。在greenlet 中用switch调度。

例子1:

import gevent

def foo():
print('Running in foo')
gevent.sleep(2) #遇到sleep会被切换走
print('Explicit context switch to foo again') def bar():
print('Explicit context to bar')
gevent.sleep(1) #又切换到上面,来回切换,直到sleep(1)结束。
print('Implicit context switch back to bar') gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),]) #列表的形式启动2个协程

运行结果:

Running in foo
Explicit context to bar
Implicit context switch back to bar
Explicit context switch to foo again

例子2:

import gevent

def foo():
print('Running in foo')
gevent.sleep(2)
print('Explicit context switch to foo again') def bar():
print('Explicit context to bar')
gevent.sleep(1)
print('Implicit context switch back to bar') def func3():
print('running in func3')
gevent.sleep(0) #没有卡住,但是会触发一次切换
print('running in func3 again') gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),gevent.spawn(func3)]) #列表的形式启动2个协程

运行结果:三个之间来回切换foo-->bar--->func3,总共需要花费2s。哪个快就先执行完哪个。

C:\abccdxddd\Oldboy\python-3.5.2-embed-amd64\python.exe C:/abccdxddd/Oldboy/Py_Exercise/Day10/自动io切换.py
Running in foo
Explicit context to bar
running in func3
running in func3 again
Implicit context switch back to bar
Explicit context switch to foo again

Gevent-自动挡切换的更多相关文章

  1. python gevent自动挡的协程切换。

    import gevent def func(): print('running func 111')#第一步运行 gevent.sleep(2)#切换到下个协程 print('running fun ...

  2. ASP.NET Core 3.0 自动挡换手动挡:在 Middleware 中执行 Controller Action

    最近由于发现奇怪的 System.Data.SqlClient 性能问题(详见之前的博文),被迫提前了向 .NET Core 3.0 的升级工作(3.0 Preview 5 中问题已被修复).郁闷的是 ...

  3. asp.netcore 自动挡Docker Nginx Redis(滴滴滴,自动挡)

    前言 上一章介绍了Docker通过多条命令创建启动运行Docker容器,由此可见这样一个个去创建单独的容器也是相当麻烦的,比如要在某个复杂项目中用DB.缓存.消息等等,这样我们还要去一个个再创建,为此 ...

  4. 自动配置/切换/查看JDK环境变量

    最近老是需要几个版本的JDK切换工作,于是网上收集资料整理,自己写了一个:自动配置/切换/查看JDK环境变量的批处理脚本.顺带3个JDK版本分别是:jdk1.6.0_43,jdk1.7.0_80,jd ...

  5. RS485自动收发切换电路 [原创www.cnblogs.com/helesheng]

    RS485是最常见的一种远距离可靠传输和组网的UART串口信号接口协议.与同样传输UART串口信号的RS422协议相比,RS485使用半双工通信,即只有一个信道,在同一时刻要么从A到B,要么从B到A传 ...

  6. python 使用gevent模块实现手动挡切换多协程。

    from greenlet import greenlet def test1(): print(12) g2.switch()#切换到协程g2执行,保存执行状态 print(23) g2.switc ...

  7. django Form的回顾--手动档和自动挡

      from django.shortcuts import renderfrom django.forms import Formfrom django.forms import fieldsfro ...

  8. js 图片自动循环切换setInterval();

    stlye样式定义 <style type="text/css">             body{background-image: url(img/001.jpg ...

  9. windows10 自动配置切换IP

    办公室与家里的ip网段不一样.每次都要来回修改本地无线WLAN IP段.写了个脚本bat,自动配置WLAN IP,方便切换. 建立 auto-set-ip.bat,保存格式需为ANSI,否则中文会乱码 ...

随机推荐

  1. mysql int类型的长度值

    整数类型的存储和范围(来自mysql手册) 类型 字节 最小值 最大值     (带符号的/无符号的) (带符号的/无符号的) TINYINT 1 -128 127     0 255 SMALLIN ...

  2. nodejs 文件系统

    nodejs访问文件系统   所有的文件系统的调用,都需要加载fs模块,即var fs=require('fs'); nodejs提供的fs模块几乎所有的功能都有两种形式选择:异步和同步,如异步的wr ...

  3. PHP使用Redis消息队列

    1.redis安装 参考:菜鸟教程http://www.runoob.com/redis/redis-install.html 2.安装php的redis扩展 1)phpinfo()查看php版本信息 ...

  4. 内置方法(item系列)

    class Foo: def __init__(self,name): self.name = name def __getitem__(self, item): # 获取时触发 print('get ...

  5. artDialog使用说明(弹窗API)

    Js代码 2. 传入HTMLElement    备注:1.元素不是复制而是完整移动到对话框中,所以原有的事件与属性都将会保留 2.如果隐藏元素被传入到对话框,会设置display:block属性显示 ...

  6. mysql bin log配置及查看

    mysql执行sql可以通过设置mysql bin 日志进行记录查看   mysql bin日志配置如下:   log_bin:on log_bin_basename:bin文件路径及名前缀(/var ...

  7. Struts2(八.添加用户多张照片实现文件上传功能)

    1.modify.jsp 在modify.jsp修改用户信息页面实现文件上传,添加用户照片的功能 如果是文件上传,method必须是post,必须指定enctype <form method=& ...

  8. 如何使用AEditor制作一个简单的H5交互页demo

    转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...

  9. python计算工资个税

    # -*- coding: utf-8 -*- total = int(input("税前总计:")) #公积金10% Gongjijin = total * 0.1 print( ...

  10. poj 3468 (区间修改 区间查询)

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions:147133   ...