基于预测器的通用异步消息通道
项目描述
message-channel
此库提供了一个消息通道对象,它从消息集合中减去特定的消息。它类似于SQL或ReactiveX的group by,但适用于异步读取器。
安装
pip install python-message-channel
使用方法
例如,假设您有一个字符串流,其中消息以a
、b
、... e
等前缀开头,并且您希望为以b
或d
等前缀开头的消息分割子通道,如下所示。
=============================================
---------------------------------> a:foo
--------------------+
--------------------|------------> c:foo
--------------------|------------> d:foo
--------------------|------------> e:foo
====================|========================
channel |
=|========================
+------------> b:foo
==========================
subchannel `m.startswith('b')`
此库是处理此类情况的工具。首先,从一个流读取器创建一个Channel
实例,然后您可以通过channel.recv()
方法接收消息。在本例中,我们使用asyncio.Queue
作为流。
import asyncio
from message_channel import Channel
async def main():
# Create original stream
stream = asyncio.Queue()
# Create stream reader
async def reader():
return await stream.get()
# Create stream channel
async with Channel(reader) as channel:
stream.put_nowait('a:foo')
stream.put_nowait('b:foo')
stream.put_nowait('c:foo')
stream.put_nowait('d:foo')
stream.put_nowait('e:foo')
assert (await channel.recv()) == 'a:foo'
assert (await channel.recv()) == 'b:foo'
assert (await channel.recv()) == 'c:foo'
assert (await channel.recv()) == 'd:foo'
assert (await channel.recv()) == 'e:foo'
if __name__ == '__main__':
asyncio.run(main())
您可以通过一个预测器使用channel.split()
方法分割通道。
async with Channel(reader) as channel:
def predicator(m):
return m.startswith('b:')
async with channel.split(predicator) as sub:
stream.put_nowait('a:foo')
stream.put_nowait('b:foo')
stream.put_nowait('c:foo')
stream.put_nowait('d:foo')
stream.put_nowait('e:foo')
# sub receive messages starts from 'b:'
assert (await sub.recv()) == 'b:foo'
# channel (original) receive messages other than above
assert (await channel.recv()) == 'a:foo'
assert (await channel.recv()) == 'c:foo'
assert (await channel.recv()) == 'd:foo'
assert (await channel.recv()) == 'e:foo'
API文档
https://fixpoint.github.io/python-message-channel/
由pdoc提供支持。
许可证
在MIT许可证下分发
项目详情
下载文件
下载您平台对应的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
python-message-channel-0.2.3.tar.gz (5.5 kB 查看哈希值)
构建分发
关闭
python-message-channel-0.2.3.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2fc6a060a601823b6f338f9201d377f2629937de71c3856b9c956ffd9a745426 |
|
MD5 | 512c5a148178e1e4d63cb8d5fba02bc6 |
|
BLAKE2b-256 | 632c294d8ec1c88ecf8094e97de96fb86d1846817ae736c173c21861cb0e0b4e |
关闭
python_message_channel-0.2.3-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9a466caf4c295d9f25a6550ef6d4f6cb8541933f65e0dcd26e7d16b17e4efa7c |
|
MD5 | 125068add7bd918ada22c5d329e65eb0 |
|
BLAKE2b-256 | 4f3450c42fb8ad637da75c264eaa2c7268c246d93c923659eb19e57fcb3fd03d |