У меня есть приложение Python Flask на Heroku, которое обслуживает веб-страницы, но также позволяет запускать определенные задачи, которые, я считаю, лучше всего структурированы в качестве фоновых задач. Таким образом, я выполнил учебник Heroku rq
, чтобы настроить фоновые задачи. Мой 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)