当我 telnet 进入服务器并输入一些内容时,我希望输出打印“生成后”然后打印“睡眠后”,但它会反过来。为什么会这样?我将如何解决它来做到这一点?
import sys, signal
from gevent.server import StreamServer
from gevent.pool import Pool
from gevent import monkey
import gevent
def signal_handler(signal, frame): sys.exit(0)
class SocketPool(object):
def __init__(self): self.pool = Pool(1000)
def listen(self, socket):
while True:
line = socket.recv(1024)
if not line:
socket.close()
break
gevent.spawn(self.wait).join()
print 'after spawn'
def add_handler(self, socket, address):
if self.pool.full(): raise Exception("At maximum pool size")
else: self.pool.spawn(self.listen, socket)
def wait(self):
gevent.sleep(7)
print 'after sleep'
def shutdown(self): self.pool.kill()
signal.signal(signal.SIGINT, signal_handler)
monkey.patch_all()
sockPool = SocketPool()
server = StreamServer(('127.0.0.1', 5000), sockPool.add_handler)
server.serve_forever()