Lassen Sie Heroku die Hintergrundverarbeitung mit Python durchführen

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.

Warum verarbeiten Sie es überhaupt im Hintergrund?

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.

Nun zur Implementierung

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).

Vorbereitung

1. Installieren Sie Redis

$ brew install redis #Wenn Sie nicht lokal entwickeln, müssen Sie nicht eingeben
$ pip install redis

2. Installieren Sie RQ (Redis Queue)

$ pip install rq

3. Beschreiben Sie die erforderlichen Bibliotheken

$ pip freeze > requirements.txt

4. Machen Sie einen Mann, der die Hintergrundverarbeitung aufruft.

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()

5. Schreiben Sie den gewünschten Vorgang in den Hintergrund

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)))

6. Schreiben Sie worker.py in Procfile

Procfile


web:python main.py
worker:python worker.py

7. Fügen Sie dem Heroku-Add-On Redistogo hinzu

$ heroku addons:create redistogo

8. Bereitstellen

$ git add .
$ git commit -m "add worker"
$ git push heroku master

9. Starten Sie den Worker

$  heroku scale worker=1

Vielen Dank, der Vorgang ist abgeschlossen

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.

Wenn in Schwierigkeiten

Lösen wir es, indem wir uns das Protokoll ansehen.

$ heroku logs -t -p worker

Recommended Posts

Lassen Sie Heroku die Hintergrundverarbeitung mit Python durchführen
Mach Houdini mit Python3! !! !!
Bildverarbeitung mit Python
So führen Sie eine Mehrkern-Parallelverarbeitung mit Python durch
Bildverarbeitung mit Python (Teil 2)
100 Sprachverarbeitungsklopfen mit Python 2015
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
"Apple-Verarbeitung" mit OpenCV3 + Python3
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Bildverarbeitung mit Python (Teil 1)
Bildverarbeitung mit Python (3)
[Python] Bildverarbeitung mit Scicit-Image
Erstelle einen LINE-Bot mit Python + Heroku
100 Sprachverarbeitungsklopfen mit Python (Kapitel 1)
100 Sprachverarbeitungsklopfen mit Python (Kapitel 3)
Die Bildverarbeitung mit Python 100 klopft an die Binärisierung Nr. 3
Schwanzrekursion mit Python2 durchführen
Was tun mit PYTHON Release?
Lassen Sie uns mit Python Image Scraping durchführen
100 Bildverarbeitung mit Python Knock # 2 Graustufen
Python | Was Sie mit Python machen können
Grundlagen der binärisierten Bildverarbeitung durch Python
Bildverarbeitung mit Python 100 Knock # 10 Medianfilter
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 2)
Bildverarbeitung mit Python & OpenCV [Tonkurve]
3. Verarbeitung natürlicher Sprache durch Python 2-1. Netzwerk für das gleichzeitige Auftreten
Bildverarbeitung mit Python 100 Knock # 12 Bewegungsfilter
Wie man einen Taschentest mit Python macht
3. Verarbeitung natürlicher Sprache durch Python 1-1. Word N-Gramm
100 Sprachverarbeitungsklopfen mit Python (Kapitel 2, Teil 1)
Überlagern Sie das Hintergrunddiagramm, das Konturdiagramm und das Vektordiagramm mit Python
Einfache Web-App mit Python + Flask + Heroku
Zeichnen mit Matrix-Reinventor von Python Image Processing-
Verarbeiten Sie Bilder in Python ganz einfach mit Pillow
Lassen Sie uns MySQL-Daten mit Python bearbeiten
Starten Sie die Umgebung mit LineBot + Heroku + Docker + Python
Die Bildverarbeitung mit Python 100 führt zu einem durchschnittlichen Pooling von # 7
Leichte Bildverarbeitung mit Python x OpenCV
Bildverarbeitung mit Python 100 Knock # 9 Gauß-Filter
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Hochladen mit Heroku, Flask, Python, Git (4)
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
FizzBuzz in Python3
Scraping mit Python
Python-Bildverarbeitung
Machen Sie Twitter Trend Bot mit Heroku + Python
Statistik mit Python
Scraping mit Python
Python mit Go
Bildverarbeitung von Grund auf mit Python (5) Fourier-Transformation
Twilio mit Python
In Python integrieren
[Python] Ich habe mit der Verarbeitung natürlicher Sprache ~ Transformatoren ~ gespielt
Spielen Sie mit 2016-Python
Python-Dateiverarbeitung
AES256 mit Python
Getestet mit Python
Bildverarbeitung von Grund auf mit Python (4) Konturextraktion
Python beginnt mit ()
Bildverarbeitung mit Python Environment Setup für Windows