跨机器边界为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第三方库


热门话题
socketJava加密聊天客户端未通过关联   java保存JFileChooser的状态   java如何让代码等待GUI完成?   java可序列化和接口:Parcelable在写入可序列化对象时遇到IOException   java Jersey客户端将覆盖ROBOTS响应   java空指针异常&如何克服   java如何使用JAXR设置字符集?   JavaSpring自定义转换器被覆盖   java将泛型类型的值设置为DTO字段   使用netty的java音频流服务器   java滚动条添加到面板时不显示在滚动窗格中   java windows通过IIS Url重写单点登录tomcat   Web应用程序的java容器管理安全性   java使用mybatis将POJO项数组传递到存储过程?