gevent
1138 ワード
# gevent/greenlet.py
class 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.py
class Hub(WaitOperationsGreenlet):
def run(self): # Hup.switch run
while 1:
try:
self.loop.run() # run
finally:
loop.error_handler = None # break the refcount cycle
import gevent
def 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