仅使用1个web dyno和0个工作dynos运行Heroku后台任务

jdo*_*dot 23 python heroku redis

我在Heroku上有一个Python Flask应用程序,用于提供网页,但也允许启动某些任务,我相信这些任务最适合作为后台任务.因此,我遵循Heroku rq教程来设置后台任务.我的Procfile看起来像这样:

web: python app.py
worker: python worker.py
Run Code Online (Sandbox Code Playgroud)

但是,我的流程目前正在扩展web=1 worker=0.鉴于这种背景过程不会经常运行,我似乎不明智地为它配置一个完整的dyno然后为那么小的东西支付34美元/月.

题:

  • 如果我将worker进程保留在我的Procfile中但是保持扩展web=1 worker=0,那么我的排队进程最终会在我的可用web dyno 上运行吗?或者排队的进程永远不会运行?
  • 如果排队的进程永远不会运行,还有另一种方法可以做到这一点,例如,twisted在我的Web应用程序中使用异步运行任务吗?

附加信息

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()
Run Code Online (Sandbox Code Playgroud)

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

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

q.enqueue(myfunction, myargument)
Run Code Online (Sandbox Code Playgroud)

Ken*_*itz 12

$ cat Procfile
web: bin/web

$ cat bin/web
python app.py &
python worker.py
Run Code Online (Sandbox Code Playgroud)

  • 我想我理解你的意思,但如果你能进一步解释你的答案,对我和社区都会更有帮助. (34认同)
  • > “这是一个好习惯吗?” 好的做法是拥有多个 dynos - 这就是 heroku。但出于一个动力目的 - 为什么不呢。 (2认同)