跨机器边界为python ipc构建的一个简单的面向消息的中间件库

pymq的Python项目详细描述


PYMQ

PyPI VersionPyPI LicenseBuild StatusCoverage Status

pymq是一个简单的面向消息的中间件库,用于跨机器边界实现python ipc。美国石油学会 通过发布/订阅、队列和同步rpc启用不同风格的远程处理。

使用pymq,开发人员可以通过松散耦合的方式集成运行在不同机器上的python应用程序 现有的传输机制。pymq目前提供了一个redis后端和一个用于测试的内存后端。API是 可扩展和其他传输可以插入。

使用pymq

初始化pymq

核心模块管理提供远程处理原语的全局eventbus实例。默认的redis 实现在pubsub对象上使用事件循环。全局事件总线通过pymq.init和 通过提供程序工厂。

importpymqfrompymq.provider.redisimportRedisConfig# starts a new thread with a Redis event looppymq.init(RedisConfig())# main application control looppymq.shutdown()

这将在本地redis服务器上创建一个eventbus实例。

发布/订阅

pub/sub允许基于事件的异步通信。事件类用于传输状态和标识通道。

importpymq# common codeclassMyEvent:pass# subscribe code@pymq.subscriberdefon_event(event:MyEvent):print('event received')# publisher codepymq.publish(MyEvent())

队列

队列是直接向前的,因为它们与pythonqueue.Queue规范兼容。

importpymqqueue=pymq.queue('my_queue')queue.put('obj')print(queue.get())# outputs 'obj'

rpc

服务器代码

importpymq@pymq.remote('product_remote')defproduct(a:int,b:int)->int:# pymq relies on type hints for marshallingreturna*b

客户代码

importpymqproduct=pymq.stub('product_remote')product(2,4)# 8

使用共享的代码基,还可以通过传递可调用的来公开和调用方法。例如,

importpymq# common codeclassRemote:defecho(self,param)->None:return'echo: '+param# serverobj=Remote()pymq.expose(obj.echo)# clientecho=pymq.stub(Remote.echo)echo('pymq')# "echo: pymq"

如果同一对象有多个提供程序,则可以使用multi=True初始化存根,以获取 结果。在这种情况下使用超时可能很有用。

remote=pymq.stub('remote_method',multi=True,timeout=2)result=remote()# result will be a list containing the results of all invocations of available remote objects

已知限制

不少。待办事项:文档;-)

背景

最初是Symmetry项目的一部分,作为独立的 图书馆。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
javai是JAXB的新手。如何将两个具有不同名称空间的不同xml合并为一个具有根元素的xml并将其解组?   JDO中的java应该是可传递的DefaultFetchGroup吗   java服务器配置问题   java在理解JList时遇到困难   java何时将RequestContextFilter用于Jersey?   java从数据库中读取文本文件。jar文件   Java正则表达式,仅适用于不包括零的正数   爪哇番石榴。类路径中的jar   JavaEE:关于设计的问题   java GUI,在面板中排列按钮   java Android为什么使用接口被认为是活动和片段之间通信的最佳实践?   java如何获取wicket图像的url以在开放图元标记中使用它   从Java字节[]>Base64>Javascript数组缓冲>Base64>byte[]   java正则表达式帮助字符串JWE766。1.pdf格式摘录766   java Hibernate,JPA忽略@Formula