繁体   English   中英

python traceback-性能问题

[英]python traceback - performance problems

我们有一个使用ac库调用某些底层函数的python脚本。 由于代码结构的原因,我们希望在每次c调用之前存储堆栈跟踪/调用堆栈。

为此,我们使用traceback.extract_stack()提取python的调用堆栈。 当以后发生异常时,我们在每个元素上使用traceback.format_list(abc)格式化并打印堆栈跟踪。

问题在于函数extract_stack太慢。 我将代码的速度从1.7秒降低到了11秒。

有什么功能可以存储堆栈跟踪信息以便以后使用/打印? stacktrace getter必须非常快。 格式化功能可能很慢,这没问题。

例:

Stack Trace:
  - LXScript: '_LXS:TOOL:RUNLX'
      File "_LXS:TOOL:RUNLX", line 13, in <module>
      File "lxs", line 1, in <module>
  - UNIFACE ACTIVATE: 'ACTQREC_SVC' 'EXECLXSRP'
  - LXScript: '_DATATRT:ACTQREC:EXECUTE@Main:run'
      File "_LXS:TOOL:RUNLX", line 13, in <module>
      File "lxs", line 1, in <module>
      File "<string>", line 63, in run
      File "<string>", line 97, in __doAll
      File "<string>", line 127, in __do
      File "_DATATRT:ACTQREC:EXECUTE", line 7, in do
  - UNIFACE ACTIVATE: 'ACTQ_CSVC' 'EXECBYREC'
  - LXScript: 'TOOL:ACTQ:SYNLAB_DATA@Main:runOnBeforeExec'
      File "TOOL:ACTQ:SYNLAB_DATA", line 1, in <module>
    ImportError: No module named 'localls'

我解决了问题!!!

我们可以使用stt_obj = sys._getframe().f_back来获取“ <frame> ?”。 然后我们可以使用estt_obj = traceback.extract_stack(f=stt_obj)traceback.format_list(estt_obj)获得堆栈跟踪作为字符串列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM