跨机器边界为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如何在导航抽屉中显示图像   DDD中的java聚合对象   java如何在登录后隐藏主活动上的项目?   java如何知道MouseWheelListener是否可以接收事件?   java地图中未显示新标记   Z3Java绑定是否具有与python相同的get_vars()API?   java重置或清除Lucene索引   Java骑士之旅代码   集合Java类树集合中的Java方法headSet和tailSet在日志(N)时间内工作吗?   java从SpringWeb服务获取Jetty实例   java需要在jira中将jsp文件更改为vm文件   创建对象时发生java IllegalMonitorStateException   java SnakeYaml从字符串第一行转储   使用java在文件中逐个使用for循环写入行