3
我用燒瓶+ gevent構建我的服務器,但名爲'getall'的gevent被燒瓶阻塞,所以'getall'函數無法在此代碼中打印消息。猴子補丁正在使用中。Gevent封鎖燒瓶,甚至使用猴子補丁
import time
import WSGICopyBody
from flask import Flask
import gevent
def handle_node_request() :
while True :
print 'in handle_node_request'
gevent.sleep(1)
def getall() :
print 'in getall'
def create_app() :
app = Flask(__name__)
app.wsgi_app = WSGICopyBody.WSGICopyBody(app.wsgi_app)
app.add_url_rule('/node',
'handle_node_request',
handle_node_request,
methods=['GET', 'PUT', 'POST', 'DELETE'])
return app
if __name__ == "__main__":
app = create_app()
from gevent import monkey
monkey.patch_all()
gevent.joinall([
gevent.spawn(app.run(host='0.0.0.0', port=8899, debug=True)),
gevent.spawn(getall),
])
嗨,大衛主義,抱歉犯了一個愚蠢的錯誤。正如你所說,這不是用Gevent運行Flask的正確方法。所以我嘗試使用如下代碼的WSGIServer:http_server = WSGIServer(('',8899),app),http_server.serve_forever()。當連接被接受時它會產生一個新的協程。但我不知道如何將'getall'功能加入到我的gevent中。 – vinllen
它看起來像下面的代碼工作正常:gevent.joinall([gevemt.spwan(http_server.serve_forever),gevent.spawn(getall),]) – vinllen