首页 > 解决方案 > 如何将模块内部进度状态填充到另一个模块?

问题描述

假设我有一个 python 3.7+ 模块/脚本 A 可以进行大量计算。此外,模块 A 正在另一个模块 B 中使用,其中模块 A 被完全封装,模块 B 不知道很多模块 A 的内部实现,只是它以某种方式输出其计算的进度。

将我视为模块 A 的负责人(人 A),不认识我的其他人(人 B)正在编写模块 B。所以人 A 基本上是在编写一个开放库。

模块 A 输出其进度的最佳方式是什么?我想这是一个设计决定。

  1. 模块 A 中的 getter 是否有意义,以便模块 B 必须始终调用此 getter(可能在循环中)才能检索 A 的进度?
  2. 是否有可能以某种方式使用在模块 A 中实现的回调函数,以便在每次进度更新时调用该函数?这样这个回调就返回了A的当前进度。
  3. 是否有任何其他可以使用的方法?

将我指向现有的解决方案将非常有帮助!

标签: pythonpython-3.xdesign-patternsprogress

解决方案


本质上,模块 B 想要观察模块 A,因为它经过了广泛的计算步骤。由模块 A 决定如何计算进度并与模块 B 共享。模块 B 无法计算进度,因为它不知道计算的细节。所以它很好地利用了观察者模式。模块 A 不断通知 B 其进度。进度更新的形式也很重要。它可以以百分比、“10 步中的第 5 步”或时间表示。它实际上将定义通知有效负载结构,模块 A 将使用该结构通知模块 B。


推荐阅读