混合同步-异步队列,用于在asyncio任务和经典线程之间互操作
项目描述
混合同步异步队列,用于在经典同步(线程)代码和异步(关于asyncio)代码之间进行通信。
类似于雅努斯神,库中的队列对象有两个面:同步和异步接口。
同步与标准队列完全兼容,异步的一个遵循asyncio 队列设计。
使用示例(Python 3.7+)
import asyncio
import janus
def threaded(sync_q: janus.SyncQueue[int]) -> None:
for i in range(100):
sync_q.put(i)
sync_q.join()
async def async_coro(async_q: janus.AsyncQueue[int]) -> None:
for i in range(100):
val = await async_q.get()
assert val == i
async_q.task_done()
async def main() -> None:
queue: janus.Queue[int] = janus.Queue()
loop = asyncio.get_running_loop()
fut = loop.run_in_executor(None, threaded, queue.sync_q)
await async_coro(queue.async_q)
await fut
queue.close()
await queue.wait_closed()
asyncio.run(main())
使用示例(Python 3.5 和 3.6)
import asyncio
import janus
loop = asyncio.get_event_loop()
def threaded(sync_q):
for i in range(100):
sync_q.put(i)
sync_q.join()
async def async_coro(async_q):
for i in range(100):
val = await async_q.get()
assert val == i
async_q.task_done()
async def main():
queue = janus.Queue()
fut = loop.run_in_executor(None, threaded, queue.sync_q)
await async_coro(queue.async_q)
await fut
queue.close()
await queue.wait_closed()
try:
loop.run_until_complete(main())
finally:
loop.close()
通信渠道
GitHub 讨论区:https://github.com/aio-libs/janus/discussions
在此处自由发布您的问题和想法。
gitter聊天 https://gitter.im/aio-libs/Lobby
许可证
janus 库遵循 Apache 2 许可。
谢谢
库开发由 DataRobot(https://datarobot.com)赞助
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源分布
janus-1.0.0.tar.gz(19.0 KB 查看哈希)
构建分布
janus-1.0.0-py3-none-any.whl(6.9 KB 查看哈希)
关闭
janus-1.0.0.tar.gz 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | df976f2cdcfb034b147a2d51edfc34ff6bfb12d4e2643d3ad0e10de058cb1612 |
|
MD5 | 2d8c0b884c14f18fc5223858eb16461e |
|
BLAKE2b-256 | b8a8facab7275d7d3d2032f375843fe46fad1cfa604a108b5a238638d4615bdc |
关闭
janus-1.0.0-py3-none-any.whl 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2596ea5482711c1ee3ef2df6c290aaf370a13c55a007826e8f7c32d696d1d00a |
|
MD5 | f941de0d6c8564870d79da4320652adb |
|
BLAKE2b-256 | c1847bfe436fa6a4943eecb17c2cca9c84215299684575376d664ea6bf294439 |