# gevent/greenlet.pyclass Greenlet(greenlet):    def __init__(self, run=None, *args, **kwargs):        _greenlet__init__(self, None, get_hub()) # 指定hup为parent        self._run = run # Greenlet.switch 切换会调用run函数    @classmethod    def spawn(cls, *args, **kwargs):        g = cls(*args, **kwargs)        g.start()        return g    def start(self):        if self._start_event is None:            self._start_event = self.parent.loop.run_callback(self.switch) # 注册swtich到loop    def run(self):        self._run(*self.args, **self.kwargs)# gevent/hup.pyclass Hub(WaitOperationsGreenlet):    def run(self): # Hup.switch 切换会调用run函数        while 1:            try:                self.loop.run() # 事件循环run            finally:                loop.error_handler = None # break the refcount cycleimport geventdef test1():    print('进入test1')    gevent.sleep(0)    print('切换test1')def test2():    print('进入test2')    gevent.sleep(0)    print('切换test2')gevent.joinall([    gevent.spawn(test1),    gevent.spawn(test2),]) 进入test1进入test2切换test1切换test2