跳转到主要内容

混合同步-异步队列,用于在asyncio任务和经典线程之间互操作

项目描述

https://github.com/aio-libs/janus/actions/workflows/ci.yml/badge.svg https://codecov.io/gh/aio-libs/janus/branch/master/graph/badge.svg https://img.shields.io/pypi/v/janus.svg Chat on Gitter

混合同步异步队列,用于在经典同步(线程)代码和异步(关于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 查看哈希

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面