以色列队列的快速实现
项目描述
以色列队列
以色列队列的快速Python (Cython) 实现。
目录
概述
本项目实现了一个队列系统,其中每个项目都与一个“组”相关联。队列按组处理项目,确保同一组的项目一起出队。此实现提供了一种同步版本(IsraeliQueue
)和一种异步版本(AsyncIsraeliQueue
),使用asyncio
。
什么是以色列队列?
以色列队列是一种优先队列类型,其中任务在同一优先级下分组。将新任务添加到队列会导致它们跳过队列并一起分组。然后,按顺序,分组取出。
为什么这很有用?
以色列队列从批量处理分组任务中受益匪浅。例如,想象一个需要登录远程存储库以获取文件的机器人或API
def login(repo_name: str):
return Session("repo_name") # Expensive operation
def download_file(session: Session, filename: str):
return Session.download(filename)
def logout(session: Session):
session.logout
现在,我们有一个线程或asyncio任务将待下载的文件添加到队列中
from israeliqueue import IsraeliQueue
queue = IsraeliQueue()
queue.put("cpython", "build.bat")
queue.put("black", "pyproject.toml")
queue.put("black", "bar") # Same repo as the second item
queue.put("cpython", "index.html") # Same repository as the first item
普通队列会导致我们的机器人登录和登出四次,逐个处理每个项目。以色列队列将存储库分组在一起,节省了设置成本,并允许在同一个请求中下载它们
while True:
group, items = queue.get_group()
session = login(group)
for item in items:
download_file(session, item)
logout(session)
如果下载过程一次接受多个文件,那就更高效了
session.download_files(*items)
其他用途可能包括批量处理AWS查询、批量处理numpy计算等等!
安装
要安装此包,只需pip install cisraeliqueue
。
您可以在项目中如下使用这些类
from israeliqueue import IsraeliQueue, AsyncIsraeliQueue
类
IsraeliQueue
这是以色列队列的同步实现。它提供基于组的任务处理,并支持阻塞和非阻塞队列操作。该类是线程安全的,可用于多线程环境。
AsyncIsraeliQueue
这是以色列队列的异步版本,使用Python的asyncio
框架构建。它提供非阻塞、异步的队列操作方法,适用于需要高并发和异步任务管理的应用程序。
文档
完整的文档可以在我们的RTD页面上找到。
复杂度
- put / put_nowait:O(1) - 在队列末尾插入。
- get / get_nowait:O(1) - 从队列前端出队。
- get_group / get_group_nowait:O(group) - 从同一组出队所有项目。
- task_done:O(1) - 简单的账务记录,用于跟踪完成的任务。
- join:O(1) - 阻塞,直到所有任务完成
同步示例
from israeliqueue import IsraeliQueue
# Initialize the queue
queue = IsraeliQueue(maxsize=10)
# Add items to the queue
queue.put('group1', 'task1')
queue.put('group1', 'task2')
queue.put('group2', 'task3')
# Get items from the queue
group, task = queue.get()
print(f"Processing {task} from {group}")
# Get all items from the same group
group, tasks = queue.get_group()
print(f"Processing all tasks from {group}: {tasks}")
# Mark the task as done
queue.task_done()
# Wait for all tasks to complete
queue.join()
异步示例
import asyncio
from israeliqueue import AsyncIsraeliQueue
async def main():
# Initialize the queue
queue = AsyncIsraeliQueue(maxsize=10)
# Add items to the queue
await queue.put('group1', 'task1')
await queue.put('group1', 'task2')
await queue.put('group2', 'task3')
# Get items from the queue
group, task = await queue.get()
print(f"Processing {task} from {group}")
# Get all items from the same group
group, tasks = await queue.get_group()
print(f"Processing all tasks from {group}: {tasks}")
# Mark the task as done
queue.task_done()
# Wait for all tasks to complete
await queue.join()
# Run the async example
asyncio.run(main())
许可证
本项目采用MIT许可证。
项目详情
关闭
cisraeliqueue-0.0.1a2-cp313-cp313-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9efc3dd4ddb2e3f57a60f282bbef4513d25eaf0a7c063f40765e02a54cc923eb |
|
MD5 | c03ff554cc60b03c7e5cd7f99862b0d6 |
|
BLAKE2b-256 | 837a99afd1b92c40f5b84487b4d8d926930e1a7acec193060735d5a5ac3d4a97 |
关闭
cisraeliqueue-0.0.1a2-cp313-cp313-win32.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0cc11fd86d8f2d92cea0ac3c8371d6442bde8f3b3f02209d764a02d59ee38410 |
|
MD5 | 9dde199157884b41820754480f0cd20e |
|
BLAKE2b-256 | 41a92d218de1b86c4dddaf60506c97d155d0495fd14f8b3e7dce2de2c9eb78f3 |
关闭
cisraeliqueue-0.0.1a2-cp313-cp313-musllinux_1_2_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d0b0107a05b49692360214cf4ce7360cf3d3912b3ba1a826fab801424a18e63c |
|
MD5 | 2e1820a788203cd0b3d2268d285f656b |
|
BLAKE2b-256 | be6914d1ddb709ec8dc0b2ca1203828454fa3f569c167ef5e5a5f7930661b02f |
关闭
cisraeliqueue-0.0.1a2-cp313-cp313-musllinux_1_2_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7555e5e6639e9bae5cdabb28a1bfca845f774d72e540780df1290b07f3f28da9 |
|
MD5 | 0f77081f7b4fb74615945b98c3f433aa |
|
BLAKE2b-256 | 4f75a8b7558f8d7432f8104d18d4fa8e7594bca76e156226d5e377dc30465133 |
关闭
cisraeliqueue-0.0.1a2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9e6aab06c79058347c0482f723ea6ac7a45d6c8ec91a6c525720b209cf4d9e0f |
|
MD5 | 33d68cf34fb44be599363f474f5a4f62 |
|
BLAKE2b-256 | 44c6896912db41812dbc89144008f6a911a9d3704f65c20e80db9e8a8f022e59 |
关闭
cisraeliqueue-0.0.1a2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f359720be3460193dcc93067bb396c10b0c6e0baf186024399bbb775d7eec8d4 |
|
MD5 | 1789eb3bca1e9036e360584df0426a9a |
|
BLAKE2b-256 | 7ce28d93a4f553777a9a6f659b1e485cc37ae5d0a0734641e0e682383f5747d2 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp313-cp313-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3fa37b0fccc08ffbd6fc9198123c6f7825b9004a158f358cd328df7804919238 |
|
MD5 | c82e6d351202976c381729761643307e |
|
BLAKE2b-256 | ddff9bff0f3ddb3a410b1153a660a30f6aa503d76327f493159823bc95dadaa5 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp313-cp313-macosx_10_13_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1c50bd5c8509231cc590dc795ae55fbcf5244e3b9263e62f97114dda5ee1f438 |
|
MD5 | 7ee3f3a67cbcc8453ab64575d55963cb |
|
BLAKE2b-256 | 19b179f0b493e65b8d7e362a9f8131dea1636ee20c7ce3fae01f82decb2b2881 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c2689ed47e94efb9c302ce85b9d450a6b926d9785f277ab93e8c536ca8ea83ea |
|
MD5 | 41c28131d7fc7ee408f67ebb1b713a80 |
|
BLAKE2b-256 | 8d27fa11d29b2ba4c1e21c8d0498c51ac9d299541fbc7a20f1cb342cb997a4f9 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-musllinux_1_2_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | df781fee212090bf6c3e69a540a985ac4f1eff12cd3ebcc1363cedc59aacd043 |
|
MD5 | b638cca84964817ddde31948c5a297fb |
|
BLAKE2b-256 | 2992dff8c4d951ef02ea0a66f9b06128d2213958929ed33af2378e49a8e9bdd1 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-musllinux_1_2_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8831e83969cd1ac7daa1ca44e788cb4925ff9e091ba2d56b847c0c75c7bf98ee |
|
MD5 | 2812b31c8d812bec73d3c044076680a2 |
|
BLAKE2b-256 | ffe61bf618951af755d1bed88bbf6e929d0307bfe336971c32a7fd01f37a9df7 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e6ea8efea87ae28a8281a689bbf78e353750208cb18840ef3512f825a3baf933 |
|
MD5 | 2d9966286ac9fe4493e463087dd2d918 |
|
BLAKE2b-256 | 2ae96b7ddc5cd264445363baf08426866803951abf8a8629caeda4d5ad35bbbf |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 30bdc2e4faa1b697d6c699fc7a87d971fa80f60a95cd6c12d60a3b19221d922b |
|
MD5 | 0b535f2907edb263d6cb888e9923d57a |
|
BLAKE2b-256 | c99af8c66a9d1ddd739ddcacc109c7393ec8656642e4f249a79433824e32fe79 |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-macosx_11_0_arm64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9cb3ceb43e54504b521f87a58ee39cd8e15cb10ef1d9f1c84391f71aa25f3963 |
|
MD5 | e9117c70f207dea50ee3b5fb54fede52 |
|
BLAKE2b-256 | dba73e1dc4a9d66e430b61a294f29e52cc4f7b03b423f143223bcf1bb963848d |
关闭
哈希值用于cisraeliqueue-0.0.1a2-cp312-cp312-macosx_10_13_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0d0f8260d88f3abf3fb447f74038d208990541566e038c60998afb7cae628051 |
|
MD5 | 23899064af4a5d459aa890252523fe82 |
|
BLAKE2b-256 | df82988f7164db9e44cc6a3d0530042a8a22b36b2659bcde3c383f9bec92e198 |