1.Event类,事件主要用于Greenlet之间的异步通信
e = gevent.event.Event() -> Event
说明: 创建一个信号对象
e.set() -> None
说明: 设置标志位
e.clear() -> None
说明: 清除标志位
e.wait() -> None
说明: 阻塞直至标志位被设置
 
扩展:
a = gevent.event.AsyncResult() -> AsyncResult
说明: 创建一个扩展可携带数据的信号对象
a.set(value=None) -> None
说明: 设置带数据的标志位
a.e.clear() -> None
说明: 清除带数据的标志位
a.get(block=True, timeout=None) -> obj
说明: 阻塞直至标志位被设置并返回value值,可设置timeout到点抛出Timeout异常
#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模块学习(一)的更多相关文章

  1. gevent模块学习(四)

    gevent.spawn会对传入的子任务集合进行调度,gevent.joinall 方法会阻塞当前程序,除非所有的greenlet都执行完毕,才会退出程序 公有方法 gevent.spawn(cls, ...

  2. gevent模块学习(三)

    3. Group类,常用于不限制数量的管理异步任务的分组且可搜集运行结果 g = gevent.pool.Group(*args) -> Group 说明: 创建一个组对象,其实就是一个不限gr ...

  3. gevent模块学习(二)

    2. Queue类,常用用于Greenlet之间的异步共享 q = gevent.queue.Queue(maxsize=None, items=None) -> Queue 说明: 创建一个指 ...

  4. python 全栈开发,Day43(引子,协程介绍,Greenlet模块,Gevent模块,Gevent之同步与异步)

    昨日内容回顾 I/O模型,面试会问到I/O操作,不占用CPU.它内部有一个专门的处理I/O模块.print和写log 属于I/O操作,它不占用CPU 线程GIL保证一个进程中的多个线程在同一时刻只有一 ...

  5. Python之路(第四十七篇) 协程:greenlet模块\gevent模块\asyncio模块

    一.协程介绍 协程:是单线程下的并发,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的. 协程相比于线程,最大的区别在于 ...

  6. 协程介绍, Greenlet模块,Gevent模块,Genvent之同步与异步

    昨日内容回顾 I/O模型,面试会问到I/O操作,不占用CPU.它内部有一个专门的处理I/O模块.print和写log 属于I/O操作,它不占用CPU 线程GIL保证一个进程中的多个线程在同一时刻只有一 ...

  7. python全栈开发,Day43(引子,协程介绍,Greenlet模块,Gevent模块,Gevent之同步与异步)

    昨日内容回顾 I/O模型,面试会问道 I/O操作,不占用CPU,它内部有一个专门的处理I/O模块 print和写log属于I/O操作,它不占用CPU 线程 GIL保证一个进程中的多个线程在同一时刻只有 ...

  8. 协程--gevent模块(单线程高并发)

    先恶补一下知识点,上节回顾 上下文切换:当CPU从执行一个线程切换到执行另外一个线程的时候,它需要先存储当前线程的本地的数据,程序指针等,然后载入另一个线程的本地数据,程序指针等,最后才开始执行.这种 ...

  9. Day5 - Python基础5 常用模块学习

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...

随机推荐

  1. 清除Windows 10的文件夹浏览痕迹

    windows 10有一个功能就是在快速访问时显示“最近访问的文件”,“常用文件”.如果是一台共用电脑,这个功能会经常暴露自己的“行踪”. 可以在“文件夹选项”-“隐私”中去掉勾选,并点击“清除”来清 ...

  2. 进行分支切换时,出现error的修复方法

    进行分支切换时,出现如此错误,导致无法正常切换:error: The following untracked working tree files would be overwritten by ch ...

  3. python:threading.Thread类的使用详解

    Python Thread类表示在单独的控制线程中运行的活动.有两种方法可以指定这种活动: 1.给构造函数传递回调对象 mthread=threading.Thread(target=xxxx,arg ...

  4. 【Django-URL name详解005】

    1.打开zqxt_views/urls.py from django.contrib import admin from django.urls import path from calc impor ...

  5. The dependency `XXX` is not used in any concrete target.

    1.在新建项目,引入CocoaPod时,当创建了podfile文件后,执行pod install时报一下错误   2.这是因为 这个第三方不知道用于哪个target,所以必须指定target 解决方案 ...

  6. 【转载】RESTful 架构风格概述

    本文转载自https://blog.igevin.info/posts/restful-architecture-in-general/ 在移动互联网的大潮下,随着docker等技术的兴起,『微服务』 ...

  7. python笔记--socket编程

    socket编程 osi七层模型 socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族 ...

  8. ios高级开发之多线程(二)NSThread技术

    多线程技术是有多套解决方案的,那么我们该如何选择呢? 技术方案 简介 语言 线程生命周期 使用频率 pthread 1.一套通用的多线程API 2.适用于UNIX,linux,windows等 3.跨 ...

  9. 在微信浏览器中 location.reload() 不刷新解决方案(直接调用方法)

    1.问题 在微信浏览器中,需要时刷新当前页面. 正常情况下我们直接使用 location.reload 方法来刷新. 2.解决方法 function realod(){ var {search,hre ...

  10. 跨域获取后台日期-ASP

    最近所有的计划都被打乱,生活节奏也有些控制不住,所以在自己还算清醒的时候,把之前一个小功能写下来,对其它人也有些帮助. 需求前景:需要用AJAX跨域获取后台服务器日期. 1.分析需求: 在这个需求中, ...