greenlet

来自百合仙子's Wiki
跳转到导航 跳转到搜索

示例

消息通讯

#!/usr/bin/env python3
# vim:fileencoding=utf-8

import greenlet

class Handler(greenlet.greenlet):
  def __init__(self):
    super().__init__()
    self.switch()

  def run(self):
    print('message handler starting...')
    while True:
      msg = self.parent.switch(None)
      print('received', msg)

  def __del__(self):
    print("Oops, I'm going to die...")

  def __enter__(self):
    return self

  def __exit__(self, exc_type, exc_value, traceback):
    self.throw()

  def send(self, *args, **kwargs):
    self.switch(*args, **kwargs)

if __name__ == '__main__':
  with Handler() as h:
    h.send('Hi~')
    h.send('bye~')

注意

greenlet 对象的 __del__ 方法会在它收到 greenlet.GreenletExit 异常后调用。直接 del 无效。解释器退出时也不会调用。而 greenlet.GreenletExit 异常会在它的 run 方法执行完后才自动触发。使用 throw() 方法可手动触发此异常。

外部链接