Artikel mit japanischer Hintergrundverarbeitung sind hauptsächlich Ruby, wahrscheinlich weil viele Leute Rails mit Heroku verwenden. Ich wollte auch einen Artikel über Python, also werde ich ein Protokoll mit meinen eigenen Notizen führen.
In Heroku verarbeitet "Web-Dyno" den normalen HTTP-Zugriff (Referenz-Dynos und der Dyno-Manager),
web dyno
läuft in 30 Sekunden ab.
Wenn Sie normal darüber nachdenken, dauert es 30 Sekunden, um das Web zu verarbeiten. Dies ist ein sehr schwerer Prozess oder ein spezieller Prozess, der Zeit in Anspruch nimmt.
Es kann jedoch vorkommen, dass Sie dies tun möchten.
Herokus Entwicklungszentrum auch für andere Sprachen als Ruby Es wurde in Worker Dynos, Background Jobs and Queuing geschrieben. Hier werde ich über Python schreiben.
Ich sollte sagen, dass es fast [hier] bleibt (https://devcenter.heroku.com/articles/python-rq).
$ brew install redis #Wenn Sie nicht lokal entwickeln, müssen Sie nicht eingeben
$ pip install redis
$ pip install rq
$ pip freeze > requirements.txt
Es scheint, dass dieser Typ die in redis angesammelten Jobs nacheinander aufruft.
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()
main.py
from rq import Queue
from worker import conn
from bottle import route, run
q = Queue(connection=conn)
@route('/index')
def index():
result = q.enqueue(background_process, 'Argument 1')
return result
def background_process(name):
#Schreiben Sie hier einen zeitaufwändigen Prozess
return name * 10
run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
Procfile
web:python main.py
worker:python worker.py
$ heroku addons:create redistogo
$ git add .
$ git commit -m "add worker"
$ git push heroku master
$ heroku scale worker=1
An diesem Punkt denke ich, dass die Hintergrundverarbeitung richtig funktionieren wird. Wenn Sie den Redis-Server ordnungsgemäß in der lokalen Umgebung platzieren, können Sie außerdem überprüfen, ob die Hintergrundverarbeitung funktioniert, wenn Sie main.py und worker.py ordnungsgemäß starten.
Lösen wir es, indem wir uns das Protokoll ansehen.
$ heroku logs -t -p worker
Recommended Posts