该行为是同步的,因为您自己的代码是同步的。gevent只是使用事件循环的协程库。它不会神奇地将同步代码转换为异步代码。
请在以下位置查看文档:http :
//www.gevent.org/servers.html
据说服务器为 每个连接 (不是每个请求)生成一个greenlet 。因此,对同一连接的多个请求的执行将被序列化。
如果要同时处理同一连接的多个请求,则需要生成新的greenlet,或将处理委托给greenlet池。
这是一个示例(在每次请求时生成一个greenlet):
import geventfrom gevent.pywsgi import WSGIServerfrom gevent.lock import Semaphorefrom geventwebsocket.handler import WebSocketHandlerfrom datetime import datetimedef process(ws,data,sem): print('{} got data "{}"'.format(datetime.now().strftime('%H:%M:%S'), data)) gevent.sleep(5) with sem: ws.send(data)def app(environ, start_response): ws = environ['wsgi.websocket'] sem = Semaphore() while True: data = ws.receive() gevent.spawn(process,ws,data,sem)server = WSGIServer(("", 10004), app,handler_class=WebSocketHandler)server.serve_forever()注意信号灯的存在。因为处理是并发的,所以需要防止两个并发的greenlet同时在套接字上写入,从而导致消息损坏。
最后一点,使用此实现,不能保证将按照请求的顺序发送答复。



