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


热门话题
java为不太可能的场景创建单元测试,值得这么麻烦吗?   java Spock模拟inputStream导致无限循环   java Apache Commons Net POP3与Gmail的连接   如何在eclipse中从另一个java程序执行java程序   右键单击java Multiple selection和JPopMenu   具有两个具有相同Java类和相同完全限定名的不同JAR   为什么我的代码总是出现“java.io.FileNotFoundException”错误?   如何使用Java Stream API有效解析文本文件   Android Studio中单个活动中的java多个日期选择器   java如何为函数编写junit测试用例   java关闭当前窗口并弹出上一个窗口(windowListener)   使用度量API的java Kafka网络度量   java计算对象的“重量”,howto   java我的片段不会显示在我的活动中   java JRE/Eclipse如何决定引用哪个JRE jar   滚动ListView时不维护Edittext的java内容   用于Java/Spring应用程序的facebook用户配置文件登录解决方案   JavaFX创建一个可传递的窗格   java Android:根据两个分隔字符拆分字符串