问题标签 [pypubsub]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 推荐的 Python 发布/订阅/调度模块?
来自PyPubSub:
Pypubsub 为您的 Python 应用程序提供了一种简单的方法来解耦其组件:应用程序的一部分可以发布消息(有或没有数据),而其他部分可以订阅/接收它们。这允许消息“发送者”和消息“侦听者”彼此不知道:
- 一个不需要导入另一个
- 发件人不需要知道
- “谁”收到消息,
- 听众将如何处理数据,
- 或者即使任何侦听器都会获取消息数据。
- 同样,听众也不必担心消息来自哪里。
这是实现模型-视图-控制器架构或任何促进其组件解耦的类似架构的绝佳工具。
从 PyPubSub 到PyDispatcher再到简单的“自制”类,似乎有相当多的 Python 模块用于发布/订阅。
在比较不同的不同模块时,是否有特定的优缺点?哪些模块集进行了基准测试和比较?
提前致谢
python - Python:线程管理由其他线程通知的事件
我正在用 Python开发一个多线程应用程序。特别是,在这个应用程序中,一个线程应该能够生成一个事件,该事件应该被通知给一个(或多个)线程;收到事件通知的线程应该中断它们的执行并运行特定的函数。在这个服务功能结束时,他们应该回去做他们在事件生成之前所做的事情。
为了做这样的事情,我正在考虑使用某种发布/订阅模块。我发现了一个非常易于使用的:PyPubSub。你可以在这里找到一个关于如何使用它的非常简单的例子。
顺便说一句,当我开始使用它时,我意识到它做了我想要的,但只有当你只使用processes时。如果您有更多线程,它会暂停整个进程(因此,其中的所有线程)以运行特定例程。这实际上不是我正在寻找的行为。不幸的是,我无法将我的应用程序从多线程更改为多进程。
你知道任何可以帮助我在多线程应用程序中做我想做的事情的模块吗?谢谢。
python - 使用 py2exe 编译 pubsub
我使用 wx.lib.pubsub (Windows, Python 2.6)
使用解释器运行我的应用程序时,pubsub 的版本是 1
当我编译并运行我的应用程序时,pubsub 的版本是 3
为什么 ?如何强制编译版本运行 pubsub api v1?
google-app-engine - 应用程序内与应用程序之间的发布-订阅模式
发布-订阅系统(例如 ActiveMQ、Google App Engine pub/sub 和 pypubsub)是否主要用于在具有不同内存空间的多台机器上运行的应用程序之间的消息通信?或者它们可以用于有效地处理在单个机器中运行的单个应用程序的组件之间的消息通信吗?
python - 防止 PyPubSub“死听者”错误
我在 Python 项目中使用包PyPubSub,因此我可以在程序运行时订阅通道的方法并在这些通道上发布。
作为压力测试的一部分,我将程序设置为反复运行多个小时。(每次运行大约需要 6 小时。)
前 20 小时似乎一切正常,但 20 小时后,我收到以下消息:“RuntimeError: BUG: Dead Listener call, still subscribed!”
据我所知,“死监听器”是一个已被垃圾收集的监听器(订阅频道的方法)。(PyPubSub 对每个通道的侦听器都有一个弱引用,但这些引用不足以防止侦听器被垃圾收集。)
这个错误不足以杀死我的整个程序,但足以断开我的服务器与客户端的 websocket 连接。(我使用Tornado实现了服务器。)
如果这是由于侦听器在没有正式取消订阅的情况下被垃圾收集造成的,那么这个问题会在运行一次而不是三四次后出现吗?我试图在每次运行结束时删除对侦听器的所有引用;我以为它们会被垃圾收集。
我应该尝试在每次运行结束时手动取消订阅侦听器吗?
如何防止发生此“死听者”错误?
编辑:我开始在每次运行结束时使用 pub.unsubscribe() 手动取消订阅侦听器,这似乎已经解决了问题。
python-3.x - Python 3——使用带有 args only 模块的 kwargs
我正在 tkinter 中编写一个 gui 并使用发布/订阅模块 (pyPubSub) 来通知程序的不同部分如果它们被订阅会发生什么。所以,我有两个需要协同工作的功能。从 tkinter,我正在使用:
在主循环中调用消息发送。正如你所看到的,它只接受 *args 作为要发送到回调的参数。我发送的回调来自 pyPubSub:
所以,我最终得到了这个:
我的问题是,如何使 args 与 kwargs 一起工作?我必须使用位置参数调用 after_idle 以与回调一起发送,但回调只需要关键字参数。
python - wx.lib.pubsub 的 Pyinstaller 和导入问题
我的 Python GUI 应用程序运行良好,但是当我尝试创建可执行文件时,我尝试使用 pyinstaller (3.3.dev0+483c819) 命令:
我收到以下问题:
可执行文件已“成功”创建,但是当我启动它时,出现以下错误:
我尝试添加 hookspath 是规范文件(它在 pyinstaller hooks 文件夹中已经存在 wx.lib.pubsub 的挂钩)但它不起作用,或者我做错了什么。
是否有导入 wx 和其他子模块的命令。我的代码中有这个
publish-subscribe - pub.py 中有无效的语法
后面的方法在 pubsub.py 中定义,它是站点包 pubsub 中的一个 python 文件。当我尝试使用它时,pycharm 告诉我这是无效的语法,带有指向“->”的箭头。我不知道为什么,我已经安装了 pypubsub。
python - 如何使用 pyqtgraph 和 pypubsub 在获取值时绘制双端队列?
我正在尝试制作一个程序,其中一个实例将值发送到另一个实例并连续绘制它们。我使用 pypubsub 对此进行了编程,以将值从一个实例发送到另一个实例。另一个实例获取值并将它们存储到双端队列中,并在更新时绘制双端队列。
我认为实例之间的通信很好,我可以看到双端队列按照我的计划每秒更新一次,但是,问题是图表不会在更新时显示双端队列的值,而是显示一次值整个更新已经完成。我想知道如何在更新时绘制双端队列。
python - PyPubSub 和 PyQt 之间的兼容性
我一直在尝试找到最优雅的方式将我的程序与 GUI 分离,这样我就可以更改我的前端而无需重新编写大量代码。
我经常使用线程,所以我经常需要通过事件(对于 wxPython)或信号(对于 PyQt)通知主 GUI 线程异步发生的事情。我已经对PyPubSub进行了一些实验,这可能是我正在寻找的,但是虽然有大量的 wxPython 示例(因为它最初包含在早期开发中)。
我不知道是否有一种“正确”的方式可以在 PyQt 中使用它而不会遇到竞争条件。如果有人对此有所了解,我将不胜感激!