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 ...
随机推荐
- Atom读写MarkDown插件选择,以及墙内安装markdown-preview-enhanced,及markdown和mermaid使用教程
1.Atom自带markdown-preview 功能太少,需要大量拓展. 2.markdown-preview-plus 功能还不错,但是其中的滚动条插件markdown-scroll-sync和最 ...
- Spring Boot 指定某个依赖的版本
Spring Boot 是个很好的框架,他为了他的一些功能生效,定义了一些依赖的版本. 比如说:Spring Boot 1.5.x 中elasticSearch是2.4.x的,这个是他本身就定义好的. ...
- CCF CSP 201812-1 小明上学
题目链接:http://118.190.20.162/view.page?gpid=T80 问题描述 试题编号: 201812-1 试题名称: 小明上学 时间限制: 1.0s 内存限制: 512.0M ...
- debugging kubernetes (Delve and Goland)
1. Build from source cd GOPATH mkdir k8s.io cd k8s.io git clone https://github.com/kubernetes/kubern ...
- charls 抓包
一.HTTPS原理: HTTPS(Hyper Text Transfer Protocol Secure),是一种基于SSL/TLS的HTTP,所有的HTTP数据都是在SSL/TLS协议封装之上进行传 ...
- Client does not support authentication
Navicat 11 连MySQL 8.0.16 报 Client does not support authentication........ 解决: alter user 'fabu'@'%' ...
- Varnish 初识
基础 Varnish Cache是一种Web应用程序加速器,也称为缓存HTTP反向代理.您将它安装在任何HTTP的服务器前面,并将其配置为缓存内容.Varnish Cache非常非常快.它通常可以 ...
- [IoC容器Unity]第四回:使用范例
1.引言 前面几个章节介绍了Unity的基本使用,主要分为程序和配置文件两种方法的使用,可以参考一下链接, [IoC容器Unity]第一回:Unity预览 [IoC容器Unity]第二回:Lifeti ...
- webpack 4.X 基础编译
webpack4.x的打包已经不能用webpack 文件a 文件b的方式,而是直接运行webpack --mode development或者webpack --mode production,这样便 ...
- js三元表达式
条件 ? true的时候执行 : false时候执行 const x = 20; let answer; if (x > 10) { answer = 'greater than 10'; } ...