[TOC] <br/><br/><br/> # <b style="color:#4F4F4F;">简介说明</b> 原文链接: - [github](https://github.com/python-greenlet/greenlet) ``` 版本:greenlet 作用:底层协程支持工具 ``` <br/> # <b style="color:#4F4F4F;">安装模块</b> <br/> # <span style="color:#619BE4">Widows</span> ***** pip install greenlet <br/> # <span style="color:#619BE4">Linux</span> ***** sudo pip3 install greenlet <br/> # <b style="color:#4F4F4F;">greenlet</b> <br/> # <span style="color:#619BE4">*getcurrent()</span> ***** 获取当前协程唯一标识 <br/> # <span style="color:#619BE4">*settrace()</span> ***** 设置跟踪函数,用于监听协程切换 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` import greenlet def test_greenlet_tracing(): def callback(event, args): print(event, 'from', id(args[0]), 'to', id(args[1])) def dummy(): g2.switch() def dummyexception(): raise Exception('excep in coroutine') main = greenlet.getcurrent() g1 = greenlet.greenlet(dummy) g2 = greenlet.greenlet(dummyexception) print('main id %s, gr1 id %s, gr2 id %s' % (id(main), id(g1), id(g2))) oldtrace = greenlet.settrace(callback) try: g1.switch() except Exception: print('Exception') finally: greenlet.settrace(oldtrace) test_greenlet_tracing() ``` <br/> # <span style="color:#619BE4">*gettrace()</span> ***** 返回设置的跟踪函数 <br/> # <b style="color:#4F4F4F;">greenlet.greenlet</b> <br/> # <span style="color:#619BE4">[new]-greenlet()</span> ***** 创建一个greenlet对象 <br/> # <span style="color:#619BE4">parent</span> ***** 获取父级协程对象 <br/> # <span style="color:#619BE4">dead</span> ***** 判断任务是否执行完毕 <br/> # <span style="color:#619BE4">gr_context</span> ***** 上下文 <br/> # <span style="color:#619BE4">gr_frame</span> ***** 最近调用时在此 greenlet 中处于活动状态的帧 <br/> # <span style="color:#619BE4">run</span> ***** 当greenlet启动的时候会调用到这个callable,如果我们需要继承greenlet.greenlet时,需要重写该方法 <br/> # <span style="color:#619BE4">throw()</span> ***** 切换协程,并立即抛出异常 <br/> # <span style="color:#619BE4">switch()</span> ***** 切换到当前任务执行 <br/> ### 示例内容 <span style="color:red;">1. 举例说明</span> ``` def test_job_1(): print(1) g2.switch() print(2) g2.switch() def test_job_2(): print(3) g1.switch() print(4) g1, g2 = greenlet.greenlet(test_job_1), greenlet.greenlet(test_job_2) g1.switch() ``` <br/>