Laissez Heroku faire le traitement en arrière-plan avec Python

Les articles de traitement d'arrière-plan japonais sont principalement Ruby, probablement parce que de nombreuses personnes utilisent Rails avec Heroku. Je voulais aussi un article sur Python, donc je garderai une trace de mes propres notes.

Pourquoi le traitez-vous en arrière-plan en premier lieu?

Dans Heroku, web dyno gère l'accès HTTP normal (Reference Dynos and the Dyno Manager), web dyno expirera dans 30 secondes. Si vous y réfléchissez normalement, il faut 30 secondes pour traiter le Web, ce qui est un processus très lourd ou un processus spécial qui prend du temps.

Cependant, il peut arriver que vous souhaitiez le faire.

Maintenant, la mise en œuvre

Le centre de développement de Heroku convient également pour les langues autres que Ruby Il a été écrit dans Worker Dynos, Background Jobs and Queuing. Ici, je vais écrire sur Python.

Je dois dire qu'il reste presque ici.

Préparation

1. Installez Redis

$ brew install redis #Si vous ne développez pas localement, vous n'avez pas à entrer
$ pip install redis

2. Installez RQ (Redis Queue)

$ pip install rq

3. Décrivez les bibliothèques requises

$ pip freeze > requirements.txt

4. Faites un gars qui appellera le traitement en arrière-plan.

Il semble que ce type appellera les emplois accumulés dans les redis un par un.

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. Écrivez le processus que vous voulez faire en arrière-plan

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):
	#Écrivez un processus chronophage ici
	return name * 10
	
	
run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

6. Écrivez worker.py dans Procfile

Procfile


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

7. Ajouter un redistogo au module complémentaire heroku

$ heroku addons:create redistogo

8. Déployer

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

9. Démarrez le travailleur

$  heroku scale worker=1

Merci, la procédure est terminée

À ce stade, je pense que le traitement en arrière-plan fonctionnera correctement. De plus, si vous placez correctement le serveur redis dans l'environnement local, vous pouvez vérifier que le traitement en arrière-plan fonctionne si vous démarrez correctement main.py et worker.py.

En cas de problème

Résolvons-le en regardant le journal.

$ heroku logs -t -p worker

Recommended Posts

Laissez Heroku faire le traitement en arrière-plan avec Python
Faites Houdini avec Python3! !! !!
Traitement d'image avec Python
Comment faire un traitement parallèle multicœur avec python
Traitement d'image avec Python (partie 2)
100 coups de traitement du langage avec Python 2015
Faites Django avec CodeStar (Python3.6.8, Django2.2.9)
"Traitement Apple" avec OpenCV3 + Python3
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Traitement du signal acoustique avec Python
Traitement d'image avec Python (partie 1)
Traitement d'image avec Python (3)
[Python] Traitement d'image avec scicit-image
Créez un bot LINE avec Python + heroku
100 traitements de langage avec Python
100 traitements de langage avec Python (chapitre 3)
Traitement d'image avec la binarisation Python 100 knocks # 3
Pour faire une récursion avec Python2
Que faire avec la sortie de PYTHON?
Faisons du scraping d'images avec Python
100 traitement d'image par Python Knock # 2 Échelle de gris
Python | Ce que vous pouvez faire avec Python
Bases du traitement d'images binarisées par Python
Traitement d'image par Python 100 knock # 10 filtre médian
100 traitements de langage avec Python (chapitre 2, partie 2)
Traitement d'image avec Python et OpenCV [Tone Curve]
3. Traitement du langage naturel par Python 2-1. Réseau de co-occurrence
Traitement d'image par Python 100 knock # 12 motion filter
Comment faire un test de sac avec python
3. Traitement du langage naturel par Python 1-1. Word N-gram
100 traitements de langage avec Python (chapitre 2, partie 1)
Superposer le diagramme d'arrière-plan, le diagramme de contour et le diagramme vectoriel avec python
Application Web facile avec Python + Flask + Heroku
Dessin avec Matrix-Reinventor of Python Image Processing-
Traitez facilement des images en Python avec Pillow
Faisons la manipulation des données MySQL avec Python
Environnement de lancement avec LineBot + Heroku + Docker + Python
Traitement d'image avec Python 100 knocks # 7 pooling moyen
Traitement d'image léger avec Python x OpenCV
Traitement d'image par Python 100 knock # 9 Filtre Gaussien
Démarrer avec Python avec 100 coups sur le traitement du langage
Comment télécharger avec Heroku, Flask, Python, Git (4)
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
FizzBuzz en Python3
Grattage avec Python
traitement d'image python
Créer un bot Twitter Trend avec heroku + Python
Statistiques avec python
Grattage avec Python
Python avec Go
Traitement d'image à partir de zéro avec python (5) Transformation de Fourier
Twilio avec Python
Intégrer avec Python
[Python] J'ai joué avec le traitement du langage naturel ~ transformers ~
Jouez avec 2016-Python
Traitement de fichiers Python
AES256 avec python
Testé avec Python
Traitement d'image à partir de zéro avec python (4) Extraction de contour
python commence par ()
Traitement d'image avec la configuration de l'environnement Python pour Windows