相关疑难解决方法(0)

推荐的Python发布/订阅/发送模块?

来自PyPubSub:

Pypubsub为您的Python应用程序提供了一种简单的方法来解耦其组件:应用程序的某些部分可以发布消息(有或没有数据),其他部分可以订阅/接收它们.这允许消息"发件人"和消息"听众"彼此不知道:

  • 一个不需要导入另一个
  • 发件人不需要知道
    • "谁"得到消息,
    • 听众会对数据做些什么,
    • 或者即使任何听众都会收到消息数据.
  • 同样,听众也不必担心消息的来源.

这是实现模型 - 视图 - 控制器架构或促进其组件解耦的任何类似架构的绝佳工具.

似乎有相当多的Python模块用于在Web上发布/订阅,从PyPubSub到PyDispatcher,再到简单的"自制"类.

比较不同的模块时是否有特定的优点和缺点?哪些模块已经过基准测试和比较?

提前致谢

python publish-subscribe pypubsub

25
推荐指数
1
解决办法
2万
查看次数

访问分配正在创建的对象的名称

我正在编写一些代码来确定分配对象的名称.这是一般调试工作,并进一步熟悉python内部.

我将它结构化为类装饰器,以便在可能的情况下,该类的所有实例都将记录其名称.代码相当长,所以除非被问到,否则我不会发布.一般技术如下

  1. __init__用代码装饰类的方法来做我想做的事

  2. 设置caller = inspect.currentframe().f_back并打开inspect.getframeinfo(caller).filename并发送给ast.parse.我没有在这里做任何错误检查,因为(1)这只是用于调试/分析/黑客攻击(2)这个确切的过程"刚刚"完成或代码不会运行.这有问题吗?

  3. 找到ast.Assignment导致当前正在执行的__init__方法运行的实例

  4. 如果len(assignment.targets) == 1那时左侧只有一个项目,我可以从中获取名称targets[0].id.在一个简单的形式a = Foo(),然后assignment.value是一个实例ast.Call.如果它是文字(例如列表),那么value将是该列表和保释,因为我感兴趣的对象没有被分配给名称.

确认这assignment.value.functype(obj).__call__我感兴趣的对象的最佳方法是什么.我很确定我保证它"在某处"或者代码甚至不会运行.我只需要它在顶级.显而易见的事情是走它并确保它不包含任何内部调用.然后我保证我有名字.(我的推理是正确的,我不确定它的假设是否正确).这并不理想,因为如果我感兴趣Foo,这可能会导致我抛弃,a = Foo(Bar())因为我不知道是不是a = Bar(Foo()).

当然我可以检查,assignment.value.func.id但后来有人可以做Foobar = Foo或什么,所以我不想太依赖这个

任何帮助将不胜感激.一如既往,我对我可能忽略的任何其他建议或问题感兴趣.

另外,我真的很惊讶我只需要发明'python-internals'标签.

python python-internals

6
推荐指数
1
解决办法
298
查看次数