我有以下Flask应用,可响应启动和停止按钮:
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
if request.form['action'] == "Start":
start()
elif request.form['action'] == "Stop":
stop()
return render_template('index.html')
running = False
“开始”按钮启动一个线程,只要设置了“正在运行”标志,该线程就会连续打印某些内容,而“停止”按钮将标志设置为“假”。
running = False
def run_task():
global running
while running:
print(f"Running")
time.sleep(1)
def start():
global running
if not running:
print("Not running, starting new thread...")
running = True
threading.Thread(target = run_task).start()
else:
print("Already running!")
def stop():
global running
if running:
running = False
这在使用Flask的dev服务器时可以正常工作,但是当我使用gunicorn时,两次按“启动”总是在第一个线程已经运行之后创建第二个线程。它说“已经在运行!”。
即使我在第一次和第二次开始按之间等待了一段时间,gunicorn也会始终启动第二个线程。
我在这里想念什么? 如何确保在给定的时间仅运行一个线程?
(我将应用程序部署到了Heroku,所以我宁愿使用gunicorn而不是Flask的内置服务器。)