我在 Heroku 上有一个 Python Flask 应用程序,它提供网页服务,但也允许启动某些任务,我认为这些任务最好构造为后台任务。因此,我按照Herokurq
教程设置后台任务。我的 Procfile 看起来像这样:
web: python app.py
worker: python worker.py
但是,我的流程目前是按比例缩放的web=1 worker=0
。鉴于此后台进程不会经常运行,因此为它提供整个测功机然后为那么小的东西每月支付 34 美元对我来说似乎是不明智的。
问题:
- 如果我保留
worker
在我的 Procfile 中声明的进程但将缩放保持在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)