跨机器边界为python ipc构建的一个简单的面向消息的中间件库
pymq的Python项目详细描述
PYMQ
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项目的一部分,作为独立的 图书馆。