Gunicorn在Heroku上使用Flask应用程序启动了两个进程/线程

时间:2019-11-15 22:53:09

标签: python multithreading heroku flask gunicorn

我有以下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的内置服务器。)

0 个答案:

没有答案