开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
python3.7.4
/
Doc
/
library
/
asyncio-queue.rst
python3.7.4
/
Doc
/
library
/
asyncio-queue.rst
asyncio-queue.rst 5.36 KB
一键复制 编辑 原始数据 按行查看 历史
zhangweibo 提交于 2021年11月17日 13:49 +08:00 . git init
.. currentmodule:: asyncio

Queues

asyncio queues are designed to be similar to classes of the :mod:`queue` module. Although asyncio queues are not thread-safe, they are designed to be used specifically in async/await code.

Note that methods of asyncio queues don't have a timeout parameter; use :func:`asyncio.wait_for` function to do queue operations with a timeout.

See also the Examples section below.

Queue

Priority Queue

A variant of :class:`Queue`; retrieves entries in priority order (lowest first).

Entries are typically tuples of the form (priority_number, data).

LIFO Queue

A variant of :class:`Queue` that retrieves most recently added entries first (last in, first out).

Exceptions

.. exception:: QueueEmpty

 This exception is raised when the :meth:`~Queue.get_nowait` method
 is called on an empty queue.


.. exception:: QueueFull

 Exception raised when the :meth:`~Queue.put_nowait` method is called
 on a queue that has reached its *maxsize*.


Examples

Queues can be used to distribute workload between several concurrent tasks:

import asyncio
import random
import time


async def worker(name, queue):
 while True:
 # Get a "work item" out of the queue.
 sleep_for = await queue.get()

 # Sleep for the "sleep_for" seconds.
 await asyncio.sleep(sleep_for)

 # Notify the queue that the "work item" has been processed.
 queue.task_done()

 print(f'{name} has slept for {sleep_for:.2f} seconds')


async def main():
 # Create a queue that we will use to store our "workload".
 queue = asyncio.Queue()

 # Generate random timings and put them into the queue.
 total_sleep_time = 0
 for _ in range(20):
 sleep_for = random.uniform(0.05, 1.0)
 total_sleep_time += sleep_for
 queue.put_nowait(sleep_for)

 # Create three worker tasks to process the queue concurrently.
 tasks = []
 for i in range(3):
 task = asyncio.create_task(worker(f'worker-{i}', queue))
 tasks.append(task)

 # Wait until the queue is fully processed.
 started_at = time.monotonic()
 await queue.join()
 total_slept_for = time.monotonic() - started_at

 # Cancel our worker tasks.
 for task in tasks:
 task.cancel()
 # Wait until all worker tasks are cancelled.
 await asyncio.gather(*tasks, return_exceptions=True)

 print('====')
 print(f'3 workers slept in parallel for {total_slept_for:.2f} seconds')
 print(f'total expected sleep time: {total_sleep_time:.2f} seconds')


asyncio.run(main())
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

暂无描述
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/python_sourcecode/python3.7.4.git
git@gitee.com:python_sourcecode/python3.7.4.git
python_sourcecode
python3.7.4
python3.7.4
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /