【问题标题】:Counting number of symbols in Python script计算 Python 脚本中的符号数
【发布时间】:2012-09-19 14:15:53
【问题描述】:

我有一个 Telit 模块,它运行 [Python 1.5.2+] (http://www.roundsolutions.com/techdocs/python/Easy_Script_Python_r13.pdf)!。我可以使用的变量、模块和方法名称的数量(

我需要类似于在链接过程之后使用 gcc 生成的映射文件,它向我显示每个常量/变量、符号、其地址和分配的大小。

【问题讨论】:

    标签: python symbols decompiling


    【解决方案1】:

    Python 是一种解释型和动态类型的语言,因此即使有可能,生成这种输出也是非常困难的。我想获取此信息的唯一合理方法是在目标解释器上分析您的代码。

    如果您正在寻找真正的内存映射,我怀疑是否存在这样的工具,因为 Python 不会经历与 C 或 C++ 相同的编译过程。由于在解析和解释程序时,所有内容都是在运行时初始化和分配的,因此没有什么可以说一个解释器的行为与另一个解释器相同,尤其是在您正在运行的这种情况下如此不同的架构。因此,没有什么可以说您的对象将创建在相同的位置,甚至具有相同的整体内存结构。

    如果您只是想确定内存占用,您可以使用 sys.getsizeof(object, [default]) 进行一些手动检查,前提是 Telit 的库支持它。我不认为他们使用的是 CPython 的直接实现。即使如此,如果您不指定 default 参数,当无法确定对象的大小时,这并不总是有效,并且会引发 TypeError

    您还可以通过研究dis 模块的字节码反汇编的输出得到一些有趣的结果,但前提是dis 在您的解释器上工作,并且您的解释器实际上是作为VM 实现的。

    如果您只需要符号列表,请查看this recipe。它使用反射来转储符号列表。

    良好的手动测试是这里的关键。最好的办法是设置模块的 CMUX(COM 端口 MUXing),并观察控制台输出。如果您开始耗尽内存,您会很快知道。

    【讨论】:

    • 感谢您回答我的问题。在我结束这个之前,我一直在等待是否有其他答案。你有任何开源工具来查看 CMUX 输出吗? Telit / Round Solutions 的那个一直在我的 Win 7 机器上崩溃。
    • 哎呀。我在 5 年多以前使用过这些模块,所以我的记忆已经生疏了。我相信 CMUX 是内置在 GSM 标准中的,因此应该存在这样的工具。如果没有,您也许可以在那里找到一个库,您可以使用它来推出自己的库。想到了 libgsm,但我不知道它是否被维护了。
    • 此外,此模块的特定问题可能会被标记为过于本地化(因此在此问题上缺乏活动)。如果你想给我发一封电子邮件(benjamin dot c dot burns at google's mail service),我很乐意听到你在做什么,并尽我所能提供帮助。
    【解决方案2】:

    这篇文章让我想起了曾经使用 Telit GM862-GPS 模块的痛苦。我的代码正是在变量、字符串等的数量加起来达到限制的时候。当然,那时我还不知道这个事实。我添加了一个无辜的行,我的程序不再工作了。在我查看数据表发现这个事实之前,我真的让我发疯了两天。

    您正在寻找的内容可能没有一个好的答案,因为 Python 解释器不是一个完整的版本。我所做的是尽可能多地使用相同的局部变量名。我还删除了函数的文档字符串(那些也算在内)并替换为#cmets。

    最后我想说这个模块适合小型应用。 python 解释器不支持线程或中断,所以你的程序必须是一个超级循环。当您的应用程序变得更大时,每次迭代将花费更长的时间。最终,您可能希望切换到更快的平台。

    【讨论】:

    • 在 stackoverflow 中阅读另一张海报时,我看到有人使用 Telit 的 HE910。此 UMTS 模块支持 Python 2.7。它们甚至支持线程、锁等。它的 Python 库要好得多。我没有发现任何提及字符串和数字数量的限制,所以这似乎是个好消息。不管怎样,在你未来的开发中考虑这个模块。
    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2020-02-11
    • 2021-09-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多