【问题标题】:Logging progress of `enumerate` function in PythonPython中`enumerate`函数的记录进度
【发布时间】:2020-04-29 20:31:38
【问题描述】:

我正在优化在 AWS 上运行的 Python(版本 2.7;由于我需要使用旧模块而受到限制)脚本,并试图准确确定我正在构建的环境中需要多少资源。为此,我在脚本运行时将大量信息记录到控制台并对不同的资源配置进行基准测试。

其中一个瓶颈是一个包含 32,000 个项目的列表,它通过 Python enumerate 函数运行。这需要很长时间才能运行,并且我的脚本在完成之前对其进度视而不见。我假设 enumerate 正在以某种方式循环遍历这些项目,所以我认为我可以在该循环中注入日志记录或打印。我知道这是“hacky”,但它现在对我来说可以正常工作,因为它在我运行测试时是临时的。

我找不到函数从哪里运行(我确实在 numba 模块中找到了一个 Enumerate 类。我尝试在那里打印但它不起作用)。我知道它是__builtin__ module 的一部分,我也无法追踪它,并尝试了几种技术来找到它的确切位置,例如打印__builtin__.__file__,但无济于事。

我的问题是,a) 你们能帮我确定函数的位置吗?这是否是一个好方法?或 b) 如果有更好的方法。

感谢您的帮助!

【问题讨论】:

  • enumerate - 许多__builtin__ 函数 - 可能是用 C 编写的。

标签: python function logging python-2.x enumerate


【解决方案1】:

我建议你使用 tqdm 模块。 tqdm

tqdm 模块用于枚举进程的可视化。它适用于可迭代对象(长度已知或未知)。

通过扩展 tqdm 类,您可以在任何所需的迭代次数后记录所需的信息。您可以在 tqdm 类文档字符串中找到更多信息。

【讨论】:

  • 这看起来是一个很好的解决方案。如果您想添加到答案中,我在这里找到了其他信息(特别是与枚举有关):github.com/tqdm/tqdm/issues/157
  • 我在我的函数中使用 enumerate(tqdm(list)) 并启动进度条,但实际上并没有显示进度。
  • 您的脚本是否仍在按要求工作而不更新进度?
  • 它只是在 0% 处显示进度条并挂在那里,所以很难分辨。如前所述,这个枚举函数需要很长时间才能完成,所以我必须让它运行一段时间才能看到它是否正常工作。我现在正在运行它并且可以报告回来,但不管它似乎没有正确显示进度。
  • 也许您可以跳过循环中的实际处理,并通过打印您正在枚举的值进行测试。如果正确枚举了值,并且更新了进度,那么您可以放心地投入实际处理
猜你喜欢
  • 2018-07-04
  • 1970-01-01
  • 2021-04-03
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 2010-10-25
相关资源
最近更新 更多