python - 仅使用 1 个 web dyno 和 0 个 worker dyno 运行 Heroku 后台任务

标签 python heroku redis

我在 Heroku 上有一个 Python Flask 应用程序,它提供网页服务,但也允许启动某些任务,我认为这些任务最好构造为后台任务。因此,我关注了 Heroku rq tutorial设置后台任务。我的 Procfile 看起来像这样:

web: python app.py
worker: python worker.py

但是,我的流程目前是按比例缩放的 web=1 worker=0。鉴于此后台进程不会经常运行,因此为它提供整个测功机然后为那么小的东西每月支付 34 美元对我来说似乎是不明智的。

问题:

  • 如果我保留在我的 Procfile 中声明的 worker 进程但将缩放保持在 web=1 worker=0,我的排队进程最终会在我可用的网络上运行吗测功机?或者排队的进程永远不会运行?
  • 如果排队的进程永远不会运行,是否有其他方法可以做到这一点,例如,在我的网络应用中使用 twisted 来异步运行任务?

其他信息

worker.py 看起来像这样:

import os
import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

主应用程序中将进程排入队列的逻辑如下所示:

from rq import Queue
from worker import conn
q = Queue(connection=conn)

q.enqueue(myfunction, myargument)

最佳答案

修改 Procfile 如下所示:

web: bin/web

现在创建 bin 目录,并创建文件 bin/web 如下所示:

#!/bin/bash
python app.py &
python worker.py

确保你给这个文件可执行权限:

$ chmod +x bin/web

关于python - 仅使用 1 个 web dyno 和 0 个 worker dyno 运行 Heroku 后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12634447/

相关文章:

python - "Can' t 连接到 'localhost' (10061) 上的 MySQL 服务器“python 错误

node.js - 我可以在 Heroku 中运行 CoffeeScript 吗?

ruby - 在 Heroku 上增加 dyno 数量后的错误

linux - 使用单个命令刷新特定的 Redis 数据库

php - 为什么 laravel 在我运行两个 ajax 调用一段时间后自动注销用户

python - python包的版本管理

python - 如何在 pandas 数据框中取消堆叠字典列?

heroku - Rails 4 + Github + Heroku : Large file storage

ruby - 如何总结整个星期的 Redis 键?

python - 在 tkinter 脚本中实现自定义数字代码