美文网首页
生成器执行状态查看

生成器执行状态查看

作者: 大海无垠_af22 | 来源:发表于2019-03-07 22:13 被阅读0次

函数抛出异常的时候,我们可以获得一个调用栈,得到每一步调用的文件、函数、行号,方便追踪异常的产生原因。当生成器抛出异常的时候,我们怎么来获取它当前执行到具体位置了呢?
每个生成器都有如下三个属性:gi_frame, gi_code, gi_running.gi_code是生成器的代码,根据这个对象我们可以获取到生成器的函数名、文件名。gi_frame相当于栈帧,记录了生成器执行的状态,根据这个对象我们可以获取到执行到的行号信息。
示例代码如下。

def fn():
    yield 1
    yield 2
    print 'after 2'
    yield 3

def show(c):
    fr = c.gi_frame
    code = c.gi_code
    filename = code.co_filename
    lineno = fr.f_lineno
    fn_name = code.co_name
    print "run at %s %s():%d" %(filename, fn_name, lineno)

y=fn()
show(y)
for n in y:
    show(y)

在上述代码中,我们先定义了一个生成器函数fn(),接着定义查看生成器状态的函数show(),在这个函数里查询gi_frame和gi_code输出文件、函数名、行号等信息。
在第一个show()的调用时,此时生成器还没执行,行号指向fn()定义的行号,接着是循环,生成器不断执行,全部输出如下所示。

run at C:/Users/Administrator/Documents/gen.py fn():1
run at C:/Users/Administrator/Documents/gen.py fn():2
run at C:/Users/Administrator/Documents/gen.py fn():3
after 2
run at C:/Users/Administrator/Documents/gen.py fn():5

以上输出清晰的显示了生成器的执行过程。

相关文章

  • 生成器执行状态查看

    函数抛出异常的时候,我们可以获得一个调用栈,得到每一步调用的文件、函数、行号,方便追踪异常的产生原因。当生成器抛出...

  • ES6 Generators

    生成器函数 生成器函数以function*标注 yield关键字,会暂停生成器的执行,在之后可以继续执行 生成器的...

  • 查看shell命令的exit返回码

    查看退出状态码 Linux 使用$? 变量保存上个执行的命令的退出状态码。你可以在要查看的命令之后立即查看或使用$...

  • python入门 第十五天 生成器、迭代器

    生成器 generator关键词yield:保存上一次的执行状态,__next__:执行函数寻找下一个yieldd...

  • Linux上面好用的命令

    查看系统状态: top 查看某个程序执行时间: ps -a ps -eo pid, lstart, etime |...

  • Xocde Developer Tools Access 提示

    终端内执行DevToolsSecurity --status 查看状态,,如果现实状态为disable,就会出现我...

  • 谈谈 generator

    概念和基本操作 1,实质是一个状态机,在生成器里面可以包含多种状态,可以暂停。2,执行generator函数会返回...

  • migration执行未执行的数据库文件

    执行所有未执行的文件 bin/phpmig migrate 查看所有文件的状态 bin/phpmig status...

  • mysql性能优化方式

    explain查看执行计划 show engine innodb status查看最近一次的死锁状态 option...

  • 聊聊Generator在实际开发中的使用

    一直都对生成器似懂非懂的感觉,知道生成器的特点: 可以在执行中暂停 执行生成器会返回迭代器 但是一直不明白生成器在...

网友评论

      本文标题:生成器执行状态查看

      本文链接:https://www.haomeiwen.com/subject/mflkpqtx.html