Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python——如何组织pubsub消息?_Python_Publish Subscribe_Organization - Fatal编程技术网

Python——如何组织pubsub消息?

Python——如何组织pubsub消息?,python,publish-subscribe,organization,Python,Publish Subscribe,Organization,我有一个项目,它大量使用wxpubsub与代码的各个部分进行通信。对于任何给定的消息,1到5个不同的订阅者可能会感兴趣 在以前版本的代码中,我有一个非常大的侦听器字典,看起来像: {"SENSOR_FLIP": "SENSOR FLIPPED", "ALARM_TRIGGERED": "ALARM TRIGGERED", etc} 我将订阅代码中对这些事件感兴趣的各个部分。当代码开始变大,并且大多数对象的init中都有订阅列表时,问题就开始了。这是一个很难处理的问题,它使得人们很难改变信息

我有一个项目,它大量使用wxpubsub与代码的各个部分进行通信。对于任何给定的消息,1到5个不同的订阅者可能会感兴趣

在以前版本的代码中,我有一个非常大的侦听器字典,看起来像:

{"SENSOR_FLIP": "SENSOR FLIPPED",
 "ALARM_TRIGGERED": "ALARM TRIGGERED",
 etc}
我将订阅代码中对这些事件感兴趣的各个部分。当代码开始变大,并且大多数对象的init中都有订阅列表时,问题就开始了。这是一个很难处理的问题,它使得人们很难改变信息的任何内容,或者知道接收到的是什么

因此,我尝试将消息标准化为3种类型:任务、通知和状态,并在开始时使用标识符来显示发送消息的人(通用标识符,因此它将发送“传感器状态”而不是“传感器状态”)。然后我订阅了我感兴趣的一般领域,让听者根据它是否真的感兴趣进行分类。这里出现的问题是信号“接口任务”-有一堆,我让整个系统中的每个传感器、站、服务、警报、灯等捕捉它们并进行分类

有没有更好的方法来组织这一点?我所能想到的就是回到特定的信号命名和配置中的一组列表,这些列表充实了每个对象感兴趣的内容,然后在每个对象的init处对其列表中的每个内容进行映射订阅


关于如何做得更好有什么想法吗?

您没有按照预期使用pubsub。发布/订阅的概念是为了减少事件制作者(发布者)和客户端(订阅者)之间的耦合.在pubsub范式中,出版商不应该知道订阅者是谁,也不应该知道他们在用信号做什么。当你制作一本“听众大词典”时,当你说很难知道“什么在接收什么”这表明您正在尝试重新耦合各个模块。我不明白您试图解决的问题是什么,但无论如何,听起来pubsub对您来说是一个错误的工具,或者您可能还没有了解如何使用它

另外,您还指出,一旦消息详细信息放置到位,就很难修改它们。当然是这样!如果您想要更改消息,并且已经有100个客户端,那么您必须对所有100个位置进行grep,看看您的更改会造成什么样的损害。怎么可能有办法避免这种情况?也许最好添加一个新邮件,而不是修改旧邮件


只有三种消息类型,然后要求所有客户筛选一堆垃圾,以找到他们感兴趣的消息,这听起来是一个糟糕的想法。同样,你似乎还没有接受pubsub概念。

我对同样的问题摸不着头脑,结果发现答案已经在Pypub中了子包,此处:

简而言之,它使您能够指定一个“主题定义树”,其中列出了主题名称和子名称层次结构,以及每个主题的必需参数和可选参数的名称


现在我有了一套简洁且定义良好的主题可供操作。谢谢Pypubsub!

我没有解释清楚。我不允许发送者了解接收者,我是说在我构建时组织它。我永远记不起发送的消息的格式、我给args起的名字或我给信号起的名字等等。我还有很多su订阅类顶部的行以获取消息,而不是像map()这样的操作如果我有一个标准的命名约定,我会立刻在一个包上注册。这就是我正在谈论的事情。在过去的几个小时里,我想出了一个很好的方法来格式化消息名,如果需要的话,可以很容易地在包中注册。例如,我有5个不同的服务发送状态——我叫信号什么?我以前有信号比如“SYSTEM_STATUS_SEND”,然后我会添加一个类似于“ALL_SERVICE_STATUS_GOOD”的参数——没有标准。此外,有时我会将参数发送为message=,有时是object=,等等——我永远记不起参数名是什么。我现在想到:——所以现在我有了类似的消息“DETECTED_ELEMENT_SENSOR_OPEN”和all send message=,现在我可以以标准方式订阅消息