gevent模块学习(一)
#coding:utf-8 # 1 事件 event
# 是一个在Greenlet之间异步通信的形式
import gevent
from gevent.event import Event evt = Event() # evt.set() 设置flag
# evt.clear() 清除
# evt.wait() 阻塞等待 def setter():
print('wait for ')
evt.rawlink(event_callback) # 注册一个回调
gevent.sleep(3)
print('ok done')
evt.set() def waiter():
print('will wait for u')
evt.wait()
print('about time') def event_callback(evt):
print('callback') def main():
gevent.joinall([
gevent.spawn(setter),
gevent.spawn(waiter),
gevent.spawn(waiter),
gevent.spawn(waiter),
gevent.spawn(waiter),
gevent.spawn(waiter),
]) if __name__ == "__main__":
main()
# coding:utf-8 import gevent import time
from gevent import event # 调用gevent的event子模块 # 三个进程需要定义三个事件event1,event2,event3,来进行12,23,31循环机制,即进程一,进程二,进程三顺序执行 def fun1(num, event1, event2): # 固定格式 i = 0 while i < 10: # 设置循环10次 i += 1 time.sleep(1) # 睡眠1秒 print'进程一:111111111' event2.set() # 将event2值设为True event1.clear() # 将event1值设为False event1.wait() # event1等待,其值为True时才执行 def fun2(num, event2, event3):
i = 0 while i < 10:
i += 1 time.sleep(1) print'进程二:222222222' event3.set() # 将event3值设为True event2.clear() # 将event2值设为False event2.wait() # event2等待,其值为True时才执行 def fun3(num, event3, event1):
i = 0 while i < 10:
i += 1 time.sleep(1) print'进程三:333333333' event1.set() # 将event1的值设为True event3.clear() # 将event3的值设为False event3.wait() # event3 等待,值为True时才执行 if __name__ == "__main__": # 执行调用格式 act1 = gevent.event.Event() # 调用event中的Event类,用act1表示 act2 = gevent.event.Event() act3 = gevent.event.Event() # 三个进程,act1,act2,act3 Gevents = [] # 建立一个数列,用来存和管理进程 g = gevent.Greenlet(fun1, 1, act1, act2) # 调用gevent中的Greenlet子模块,用Greenlet创建进程一 g.start() print'进程一启动:' Gevents.append(g) # 将进程一加入到Gevents数列
g = gevent.Greenlet(fun2, 2, act2, act3) g.start() print'进程二启动:' Gevents.append(g)
g = gevent.Greenlet(fun3, 3, act3, act1) g.start() print'进程三启动:' print'所有进程都已启动!' Gevents.append(g)
gevent.joinall(Gevents) # 调用Greenlet中的joinall函数,将Gevents的进程收集排列
# coding:utf-8
# AsyncResult 允许你在唤醒调用上附加一个值,有时也被称作future或defered 因为它持有一个指向将来任意时间可设置为任何值的引用 import gevent
from gevent.event import AsyncResult
a = AsyncResult() # a.set(value=None)
# a.clear()
# a.get(block=True, timeout=None) 阻塞直至标志位被设置并返回value值, 可设置timeout def setter():
gevent.sleep(2)
a.set('aaaa') def waiter():
print(a.get(timeout=5)) gevent.joinall([
gevent.spawn(setter),
gevent.spawn(waiter)
])
gevent模块学习(一)的更多相关文章
- gevent模块学习(四)
gevent.spawn会对传入的子任务集合进行调度,gevent.joinall 方法会阻塞当前程序,除非所有的greenlet都执行完毕,才会退出程序 公有方法 gevent.spawn(cls, ...
- gevent模块学习(三)
3. Group类,常用于不限制数量的管理异步任务的分组且可搜集运行结果 g = gevent.pool.Group(*args) -> Group 说明: 创建一个组对象,其实就是一个不限gr ...
- gevent模块学习(二)
2. Queue类,常用用于Greenlet之间的异步共享 q = gevent.queue.Queue(maxsize=None, items=None) -> Queue 说明: 创建一个指 ...
- python 全栈开发,Day43(引子,协程介绍,Greenlet模块,Gevent模块,Gevent之同步与异步)
昨日内容回顾 I/O模型,面试会问到I/O操作,不占用CPU.它内部有一个专门的处理I/O模块.print和写log 属于I/O操作,它不占用CPU 线程GIL保证一个进程中的多个线程在同一时刻只有一 ...
- Python之路(第四十七篇) 协程:greenlet模块\gevent模块\asyncio模块
一.协程介绍 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 协程相比于线程,最大的区别在于 ...
- 协程介绍, Greenlet模块,Gevent模块,Genvent之同步与异步
昨日内容回顾 I/O模型,面试会问到I/O操作,不占用CPU.它内部有一个专门的处理I/O模块.print和写log 属于I/O操作,它不占用CPU 线程GIL保证一个进程中的多个线程在同一时刻只有一 ...
- python全栈开发,Day43(引子,协程介绍,Greenlet模块,Gevent模块,Gevent之同步与异步)
昨日内容回顾 I/O模型,面试会问道 I/O操作,不占用CPU,它内部有一个专门的处理I/O模块 print和写log属于I/O操作,它不占用CPU 线程 GIL保证一个进程中的多个线程在同一时刻只有 ...
- 协程--gevent模块(单线程高并发)
先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...
- Day5 - Python基础5 常用模块学习
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...
随机推荐
- C#返回字符串的字节长度,一个中文算两个字符的代码
如下代码段是关于C#返回字符串的字节长度,一个中文算两个字符的代码. public static int GetLength(string str) { if (str.Length == 0) re ...
- SQL并发处理方案——乐观锁和悲观锁
(一)乐观锁和悲观锁的概念 悲观锁 在关系数据库管理系统里,悲观并发控制(又名“悲观锁”,Pessimistic Concurrency Control,缩写“PCC”)是一种并发控制的方法.它可以阻 ...
- linux 网络设置
centos7 ifcfg-ens33静态ip地址配置 vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=EthernetPROXY_METHO ...
- js实现简易版validate
需求分析 项目中需要根据选择不同的类型,显示不同的表单,采用的方法是css隐藏显示不需要的表单,但是这个表单字段都是必填的,尝试把不同的表单放在不同的form里,提交时根据不同的类型调用miniui自 ...
- 14: InfluxDB+Grafana打造大数据监控利器
参考博客: https://www.cnblogs.com/davidwang456/p/7795263.html
- 算法(第四版)C# 习题题解——1.4
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 这一节内容可能会用到的库文件有 ...
- Guitar Pro中如何添加与删除音轨
Guitar Pro是一款专业的吉他打谱作曲软件,适合每一位热爱吉他并想进一步学习的大家.今天,我们一起来看看Guitar Pro软件写谱时音轨如何添加与删除. Guitar Pro能够同时支持虚拟音 ...
- SAP 查询分析器,查询报表自动生成,SQL查询测试实现说明(转)
在日常的SAP开发和应用中,经常需要通过查询SAP数据表来处理日常业务,比如:数据对账.报表SQL测试.SAP查询功能开发等.通过开发SAP查询分析器,SAP实施和开发人员,可以在较短的时间内查询到需 ...
- Hadoop3.2.0集群(4节点-无HA)
1.准备环境 1.1配置dns # cat /etc/hosts 172.27.133.60 hadoop-01 172.27.133.61 hadoop-02 172.27.133.62 hadoo ...
- zabbix历史数据相关表研究
zabbix历史数据相关表研究 history和trends相关表 history和trends都是存储历史数据的地方.一般是通过监控项(item)配置里.匹配更新监控项(item)和设置HouseK ...