Heroku多线程

Heroku multi-threading

我正在用 heroku 制作一个网站,现在我正在制作一个 运行 在后台运行的任务
像这样:

def task():
    while True:
        ...
        # some task that will run in the background

在我的文件 app.py 中,我有以下代码:

if __name__ == "__main__":
    Thread(target=app.run).start()
    Thread(target=task).start()

我在任务函数中放了一些 print(类似于 print("Task started")
但是在heroku log中我只看到flask started的消息,没有看到task的消息,连error都没有,task函数中应该发生的事情没有发生。我尝试 运行 我本地机器上的 Flask 应用程序,它可以工作。

那么如何解决这个问题?

在 Heroku 上执行此操作的“正确”方法是将后台任务定义为单独的进程,例如通过在 Procfile:

中做这样的事情
web: gunicorn app:app
worker: python path/to/background_task.py

现在您可以 scale up a dyno 到 运行 worker 过程:

heroku ps:scale worker=1

lots of benefits to this approach,但这确实意味着您至少需要有两个dynos 运行ning。那要么花钱,要么以更快的速度消耗免费的测功机小时数。