中止 Flask 应用程序中的所有 运行 函数
Abort all running functions in a Flask application
我正在使用 Flask 开发一个基于区块链的应用程序,我需要一个端点函数,在调用时,所有 运行ning 函数都应该被中止。例如:
import sys
import flask
import time
app = flask.Flask(__name__)
@app.route("/infi1")
def infi1():
while True:
print("infi1")
time.sleep(1)
@app.route("/infi2")
def infi2():
while True:
print("infi2")
time.sleep(1)
@app.route("/abort")
def abort_funcs():
# when this function is called, all the running functions should be aborted
''' code to stop
all running functions '''
pass
@app.route("/")
def index():
return flask.request.remote_addr
app.run(host="0.0.0.0", port=8080)
我将首先 运行 infi1() 和 infi2() 所以我的应用程序将无限期地打印两条消息 -
curl -X GET http://localhost:8080/infi1
curl -X GET http://localhost:8080/infi2
$ python d.py
* Serving Flask app "d" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
infi1
infi1
infi1
infi1
infi1
infi2
infi1
infi2
infi1
infi2
infi1
infi2
infi1
infi2
infi1
但是当我向 /abort 发出 GET 请求时,我希望这两个函数中止。
是否可以在 Flask 应用程序中执行此操作?我知道我可以使用线程事件或标志,但我的应用程序中会有如此多的 if/while 条件检查点。
谢谢!
您应该使用异步 framework/server。像 Flask 这样的同步服务器一次只能做一件事,所以 abort_funcs 视图在当前 运行 完成之前不会被处理(这在你的例子中从来没有,因为它们是无限的循环)。
如果您的程序似乎同时处理多个请求,那可能是因为您在它前面使用了一些服务器,该服务器正在生成多个进程,但这些进程仍然是独立的,并且每个进程只能处理一个视图一次。
使用异步服务器,您可以让这些视图在后台线程中启动无限循环,并等待它们 return 响应。另一种选择是 运行 任务队列中的那些长循环(例如 Celery),但这将消除这些任务直接 return 视图响应的可能性。
我正在使用 Flask 开发一个基于区块链的应用程序,我需要一个端点函数,在调用时,所有 运行ning 函数都应该被中止。例如:
import sys
import flask
import time
app = flask.Flask(__name__)
@app.route("/infi1")
def infi1():
while True:
print("infi1")
time.sleep(1)
@app.route("/infi2")
def infi2():
while True:
print("infi2")
time.sleep(1)
@app.route("/abort")
def abort_funcs():
# when this function is called, all the running functions should be aborted
''' code to stop
all running functions '''
pass
@app.route("/")
def index():
return flask.request.remote_addr
app.run(host="0.0.0.0", port=8080)
我将首先 运行 infi1() 和 infi2() 所以我的应用程序将无限期地打印两条消息 -
curl -X GET http://localhost:8080/infi1
curl -X GET http://localhost:8080/infi2
$ python d.py
* Serving Flask app "d" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
infi1
infi1
infi1
infi1
infi1
infi2
infi1
infi2
infi1
infi2
infi1
infi2
infi1
infi2
infi1
但是当我向 /abort 发出 GET 请求时,我希望这两个函数中止。
是否可以在 Flask 应用程序中执行此操作?我知道我可以使用线程事件或标志,但我的应用程序中会有如此多的 if/while 条件检查点。
谢谢!
您应该使用异步 framework/server。像 Flask 这样的同步服务器一次只能做一件事,所以 abort_funcs 视图在当前 运行 完成之前不会被处理(这在你的例子中从来没有,因为它们是无限的循环)。
如果您的程序似乎同时处理多个请求,那可能是因为您在它前面使用了一些服务器,该服务器正在生成多个进程,但这些进程仍然是独立的,并且每个进程只能处理一个视图一次。
使用异步服务器,您可以让这些视图在后台线程中启动无限循环,并等待它们 return 响应。另一种选择是 运行 任务队列中的那些长循环(例如 Celery),但这将消除这些任务直接 return 视图响应的可能性。