Flask POST 请求优化
python 301
原文标题 :Flask POST request optimization
我的机器上正在运行一个烧瓶应用程序,并且我正在从我自己机器上的线程向它发送一个发布请求。然后,flask 应用程序将其发送到磁盘,在其上训练模型,然后将数据推出(发布)。我正在计时每一步,因为它看起来很慢。原来最慢的部分是从我的 csv 获取数据(称为欺骗)。
Module | end | UTC now | timecost |
---|---|---|---|
SPOOF | IN | …35:00.110285 | 0 |
SPOOF | OUT | …35:00.112283 | 0.001998 |
FLASK | IN | …35:02.160254 | 2.047971 |
FLASK | OUT | …35:02.167264 | 0.007010 |
DATA | IN | …35:02.168251 | .. |
DATA DISK | IN | …35:02.168251 | .. |
DATA DISK | OUT | …35:02.176605 | .. |
DATA | OUT | …35:02.179534 | .. |
MODEL | IN | …35:02.180788 | .. |
MODEL | OUT | …35:02.495012 | 0.314224 |
PUBLISH | IN | …35:02.496034 | .. |
PUBLISH | OUT | …35:02.496534 | .. |
将其放入烧瓶需要 2 秒,而在新数据上训练模型只需不到三分之一秒。我一定做错了什么。
这是发送 post 请求的线程:
def run(self):
while True:
print('SPOOF IN', dt.datetime.utcnow())
x = self.provideIncrementalWithId()
print('SPOOF OUT', dt.datetime.utcnow())
response = requests.post(
url=f'http://localhost:{self.port}/subscription/update',
json=x)
这里基本上是整个烧瓶应用程序,但我认为只有update
相关:
import threading
import secrets
import satori
import datetime as dt
from flask import Flask
from flask import request
from waitress import serve
from satori.lib.engine.structs import Observation
app = Flask(__name__)
app.config['SECRET_KEY'] = secrets.token_urlsafe(16)
Engine = satori.getEngine()
Engine.run()
def spoofStreamer():
thread = threading.Thread(target=satori.spoof.Streamr().run, daemon=True)
thread.start()
@app.route('/subscription/update', methods=['POST'])
def update():
print('FLASK IN', dt.datetime.utcnow())
x = Observation(request.json)
print('FLASK OUT', dt.datetime.utcnow())
Engine.data.newData.on_next(x)
return request.json
if __name__ == '__main__':
spoofStreamer()
serve(app, host='0.0.0.0', port=satori.config.get()['port'])
我在这里做了什么愚蠢的事情吗?我不应该使用女服务员吗?为什么它这么慢,特别是考虑到请求来自同一台机器?
编辑:我刚刚意识到这可能是一个版本控制,这是我的相关版本:
package | version |
---|---|
Python | 3.9.5 |
Flask | 2.0.1 |
click | 8.0.0rc1 |
colorama | 0.4.4 |
itsdangerous | 2.0.1 |
Jinja2 | 3.0.1 |
MarkupSafe | 2.0.1 |
Werkzeug | 2.0.1 |
waitress | 2.0.0 |
Edit2:将我的包更新到最新版本后,我仍然有 2 秒的时间来获取请求
Module | end | UTC now | timecost |
---|---|---|---|
SPOOF | IN | ..00:24.821877 | 0 |
SPOOF | OUT | ..00:24.823876 | 0.001999 |
FLASK | IN | ..00:26.873730 | 2.049854 |
FLASK | OUT | ..00:26.880726 | 0.006996 |