2. Queue类,常用用于Greenlet之间的异步共享
q = gevent.queue.Queue(maxsize=None, items=None) -> Queue
说明: 创建一个指定大小包含指定items的队列对象
q.empty() -> Boolean
说明: 队列是否为空
q.full() -> Boolean
说明: 队列是否已满,如果初始化时maxsize为None时队列永远不会满,除非内存耗尽
q.get(block=True, timeout=None) -> obj
说明: 队列尾部弹出并返回末尾元素,block为True如果队列为空会一直等待,否则会抛出gevent.queue.Empty异常
q.get_nowait() -> obj
说明: 同q.get(block=False),如果队列为空直接返回gevent.queue.Empty
q.put(item, block=True, timeout=None) -> None
说明: 队列头部插入item,如果block为True则等待队列有空间时再插入,如果超出timeout则抛出Timeout异常,否则直接抛出gevent.queue.Full异常
q.put_nowait(self, item) -> None
说明: 同q.put(block=False),如果队列满直接返回gevent.queue.Full
q.qsize() -> int
说明: 返回队列的元素数
import gevent
from gevent.queue import Queue # 队列是一个排序的数据集合 put和get都有非阻塞模式,put_nowait和get_nowait不会阻塞,在操作不能完成时抛出gevent.queue.Empty或gevent.queue.Full异常 tasks = Queue() def worker(n):
while not tasks.empty():
task = tasks.get()
print('worker %s got task %s'%(n, task))
gevent.sleep(0) print('Quitting time!') def boss():
for i in xrange(1, 25):
tasks.put_nowait(i) gevent.spawn(boss).join() gevent.joinall([
gevent.spawn(worker, 'steve'),
gevent.spawn(worker, 'john'),
gevent.spawn(worker, 'nancy'),
])
# coding:utf-8

import gevent
from gevent.queue import Queue, Empty, LifoQueue, PriorityQueue # 先进先出
# 先进后出
# 优先级队列 class Job():
def __init__(self, prority, des):
self.prority = prority
self.des = des def __cmp__(self, other):
return cmp(self.prority, other.prority) def __str__(self):
return 'prority %d des %s'%(self.prority, self.des) q = LifoQueue()
q.put(Job(3, 'mid job'))
q.put(Job(10, 'low job'))
q.put(Job(1, 'important job'))
while not q.empty():
job = q.get()
print(job)

joinableQueue JoinableQueue 比Queue多了task_done() 与join()两个函数,都是专用于全球进行编程的,当然多是生产者消费者问题。 task_done() 是用在get()后,告诉os, 我get完了,join()是说Queue里所有的items都被拿出来搞完了。 --------------------- 参考来自 heavendai 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/heavendai/article/details/24380325?utm_source=copy

# coding:utf-8
import gevent
from gevent import Greenlet from gevent.queue import JoinableQueue, Empty
# 主队列 class Actor(Greenlet):
def __init__(self, data):
self.data = data
Greenlet.__init__(self) def _run(self):
result = do_something(self.data)
return result def do_something(data):
print('the data is %s'%data) queue = JoinableQueue() def boss():
for i in xrange(1, 1000):
queue.put_nowait(i)
boss() def work():
while True:
try:
data = queue.get(timeout=5)
print('data is %s'%data)
except Empty:
gevent.sleep(0.5)
break
finally:
queue.task_done()
# queue.join()
# 交付给Actor
# if data:
# g1 = Actor(data)
# g1.start()
# g1.join()
for i in range(5):
gevent.spawn(work)
queue.join()

gevent模块学习(二)的更多相关文章

  1. Python urllib和urllib2模块学习(二)

    一.urllib其它函数 前面介绍了 urllib 模块,以及它常用的 urlopen() 和 urlretrieve()函数的使用介绍.当然 urllib 还有一些其它很有用的辅助方法,比如对 ur ...

  2. gevent模块学习(一)

    1.Event类,事件主要用于Greenlet之间的异步通信 e = gevent.event.Event() -> Event 说明: 创建一个信号对象 e.set() -> None ...

  3. Python3 学习第九弹: 模块学习二之文件管理模块

    os模块 提供访问操作系统的接口 1> name 获得当前操作系统 其中 'nt' 是 windows 'posix' 是 linux 2> environ 获得当前系统的环境变量的字典, ...

  4. gevent模块学习(四)

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

  5. gevent模块学习(三)

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

  6. python模块学习(二)

    configparser模块 软件常见文档格式如下: [DEFAULT]ServerAliveInterval = 45Compression = yesCompressionLevel = 9For ...

  7. nodejs的mysql模块学习(二)连接数据库

    nodejs连接mysql的方式有两种 官方建议的第一种是 let mysql = require('mysql'); let connection = mysql.createConnection( ...

  8. Python学习 :常用模块(二)

    常用模块(二) 四.os模块 os模块是与操作系统交互的一个接口,用于对操作系统进行调用 os.getcwd() # 提供当前工作目录 os.chdir() # 改变当前工作目录 os.curdir( ...

  9. Node学习(二) --使用http和fs模块实现一个简单的服务器

    1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...

随机推荐

  1. idea的mybatis的mysql语句的小数转换百分号

    其实mysql的小数转换百分数有两种函数ROUND和TRUNCATE 例子: 1.round(x,d) :用于数据的四舍五入,round(x)  ,其实就是round(x,0),也就是默认d为0: 这 ...

  2. 2018-2019-2 20165335 《网络对抗技术》 Exp6 信息搜集与漏洞扫描

    1.实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 2.实践内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具 ...

  3. vue 定义全局函数,监听android返回键事件

    vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...

  4. php读取文件使用redis的pipeline(管道)导入大批量数据

    需求:需要做一个后台上传TXT文件,读取其中的内容,然后导入redis库中.要求速度快,并且支持至少10W以上的数据,而内容也就一个字段存类似openid和QQ 传统做法:我一开始做的时候就老套路,遍 ...

  5. qemu到kvm的处理,再到vm的运行

    1.QEMU创建虚拟机发起:kvm_ioctl(s, KVM_CREATE_VM, type); KVM中kvm_dev_ioctl判断参数->kvm_dev_ioctl_create_vm-& ...

  6. sql 与 mysql

    my sql 中=和!=运算符是不起作用的:

  7. Max Sum Plus Plus HDU - 1024

    Max Sum Plus Plus     HDU - 1024 Now I think you have got an AC in Ignatius.L's "Max Sum" ...

  8. LeetCode 整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...

  9. 组装一台PRUSA I3打印机

    闲来无事,又搞了台机.这样下去顶不住了.草. 还是咸鱼购买,但是这台收到的时候比我以前任何一台都要散,几乎重新装了一台. 此处省略收到货时候的零件图,省略装机图. 不得不提的是,原机用的山寨melzi ...

  10. shell之for和if实现批量替换多目录下的文件

    问题背景: 生产环境的项目图片文件夹众多,每个项目都会有一个图片文件夹,现在要批量替换每个文件夹下的一张模板图片 如图,我们要替换每一个文件夹下的01.jpg shell 脚本 #/bin/bash ...