没有合适的资源?快使用搜索试试~ 我知道了~
BOSDGM#book#03-协程队列1
试读
需积分: 0 0 下载量 149 浏览量
更新于2022-07-25
收藏 5KB MD 举报
1. 协程队列由于协程为单线程推动的, 所以协程队列之间可以不需要进行特殊处理即可通讯,所以可以直接用list代替.也可以使用gevent.Queue协程队列,
# 1. 协程队列
由于协程为单线程推动的, 所以协程队列之间可以不需要进行特殊处理即可通讯,
* 所以可以直接用`list`代替.
* 也可以使用`gevent.Queue`
## 1.1 `gevent`
协程队列, 原理使用双端队列`collections.deque`实现.
```python
def __init__(self, maxsize=None, items=(), _warn_depth=2):
return Queue
```
* maxsize: `int`, 队列容纳上限
* items: `tuple`, 队列初始化数据
* _warn_depth: `int`, 如果`maxsize=0`, 是否发出警告, 2以上表示不警告, 以下表示警告
**示例**
```python
import time
import gevent
from gevent.monkey import patch_all
from gevent.queue import Queue
from gevent.pool import Pool
patch_all()
def demo1(q):
i = 0
while True:
q.put(i)
if i == 20:
break
i += 1
def demo2(q):
while True:
print(q.get())
time.sleep(1)
if q.empty() is True:
break
print("over")
if __name__ == "__main__":
q = Queue(2)
# g1 = gevent.spawn(demo1, q)
# g2 = gevent.spawn(demo2, q)
# g3 = gevent.spawn(demo2, q)
# g1.start()
# g2.start()
# g3.start()
# g1.join()
# g2.join()
"""池"""
pool = Pool(10)
pool.apply_async(demo1, args=(q,))
pool.apply_async(demo2, args=(q,))
pool.apply_async(demo2, args=(q,))
pool.join()
```
## 1.2 使用list
由于协程是通过单线程实现的, 容器对象(`list`, `dict`, `set`)时全局通用的, 所以可以使用这些容器代替队列进行操作
**示例(list)**
```python
imp
点击阅读更多
资源推荐
资源评论
2022-07-25 上传
108 浏览量
201 浏览量
148 浏览量
152 浏览量
156 浏览量
154 浏览量
2022-07-25 上传
2022-07-25 上传
112 浏览量
2022-07-25 上传
2022-07-25 上传
167 浏览量
108 浏览量
166 浏览量
2008-09-26 上传
2010-10-22 上传
130 浏览量
2021-01-14 上传
2013-05-14 上传
资源评论
熊比哒
- 粉丝: 35
- 资源: 292
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功