greenlet
跳转到导航
跳转到搜索
示例
消息通讯
#!/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()方法可手动触发此异常。
外部链接
- 官方网站(bitbucket)