Python/Flask:一次只能有一个用户调用端点

Python/Flask:一次只能有一个用户调用端点,python,flask,Python,Flask,我有一个使用Python/Flask的API构建,我有一个由系统调用的名为/build task的端点,这个端点运行大约需要30分钟 我的问题是,当/build任务端点已经启动并运行时,如何锁定它?所以其他用户或系统无法调用此端点 您有一些解决此问题的方法: 1-您可以创建一个会话对象,在对象中保存一个标志,并检查端点是否已在运行,并做出相应的响应 2-在数据库上标记,检查端点是否已在运行并做出相应响应。您有一些解决此问题的方法: 1-您可以创建一个会话对象,在对象中保存一个标志,并检查端点是否

我有一个使用Python/Flask的API构建,我有一个由系统调用的名为
/build task
的端点,这个端点运行大约需要30分钟


我的问题是,当
/build任务
端点已经启动并运行时,如何锁定它?所以其他用户或系统无法调用此端点

您有一些解决此问题的方法:

1-您可以创建一个会话对象,在对象中保存一个标志,并检查端点是否已在运行,并做出相应的响应


2-在数据库上标记,检查端点是否已在运行并做出相应响应。

您有一些解决此问题的方法:

1-您可以创建一个会话对象,在对象中保存一个标志,并检查端点是否已在运行,并做出相应的响应


2-在数据库上标记,检查端点是否已在运行并做出相应响应。

最好的方法是将数据保存到数据库中,并在运行端点函数之前进行检查

这里还有另一种使用Flask的“应用程序”存储时间的快速“脏”方法:

from flask import Flask, session
from datetime import datetime, timedelta

app = Flask(__name__)

app.secret_key = 'Wow a Secret!'


@app.route('/build-task')
def build_task():
    print ()
    if datetime.now() - app.task_start_time > timedelta(seconds=10):
        app.task_start_time = datetime.now()
        return "I am running a great task now :)"
    else:
        return "Cannot help you!<br>You will have to wait until we reach 10 seconds: " + str(datetime.now() - app.task_start_time)

if __name__ == '__main__':
    app.task_start_time = datetime.now() - timedelta(seconds=10)
    app.run(debug=True)
从烧瓶导入烧瓶,会话
从datetime导入datetime,timedelta
app=烧瓶(名称)
app.secret\u key='哇,一个秘密
@app.route(“/build task”)
def build_任务():
打印()
如果datetime.now()-app.task\u start\u time>timedelta(秒=10):
app.task\u start\u time=datetime.now()
return“我现在正在执行一项伟大的任务:)”
其他:
return“无法帮助您!
您必须等待10秒:”+str(datetime.now()-app.task\u start\u time) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app.task\u start\u time=datetime.now()-timedelta(秒=10) app.run(debug=True)
最好的方法是将数据保存到数据库中,并在运行endpoint函数之前进行检查

这里还有另一种使用Flask的“应用程序”存储时间的快速“脏”方法:

from flask import Flask, session
from datetime import datetime, timedelta

app = Flask(__name__)

app.secret_key = 'Wow a Secret!'


@app.route('/build-task')
def build_task():
    print ()
    if datetime.now() - app.task_start_time > timedelta(seconds=10):
        app.task_start_time = datetime.now()
        return "I am running a great task now :)"
    else:
        return "Cannot help you!<br>You will have to wait until we reach 10 seconds: " + str(datetime.now() - app.task_start_time)

if __name__ == '__main__':
    app.task_start_time = datetime.now() - timedelta(seconds=10)
    app.run(debug=True)
从烧瓶导入烧瓶,会话
从datetime导入datetime,timedelta
app=烧瓶(名称)
app.secret\u key='哇,一个秘密
@app.route(“/build task”)
def build_任务():
打印()
如果datetime.now()-app.task\u start\u time>timedelta(秒=10):
app.task\u start\u time=datetime.now()
return“我现在正在执行一项伟大的任务:)”
其他:
return“无法帮助您!
您必须等待10秒:”+str(datetime.now()-app.task\u start\u time) 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': app.task\u start\u time=datetime.now()-timedelta(秒=10) app.run(debug=True)
只需使用一个每30分钟重置一次的标志,但如果需要40分钟或20分钟怎么办?硬编码某物运行的时间有点可疑。只需使用一个在启动/完成时改变的标志,或者检查Marcelo文章中提到的db。只需使用一个每30分钟重置一次的标志,但如果需要40分钟,或者仅仅20分钟怎么办?硬编码某物运行的时间有点可疑。只需使用一个在启动/完成时改变的标志,或者检查Marcelo文章中提到的db。