Flask POST 请求优化

社会演员多 python 202

原文标题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

原文链接:https://stackoverflow.com//questions/71919526/flask-post-request-optimization

回复

我来回复
  • MetaStack的头像
    MetaStack 评论

    你知道它是什么..。我在 post call 中将 localhost 更改为 127.0.0.1 ,现在几乎是即时的。

    2年前 0条评论