Ich habe mit Flask eine einfache Python-Anwendung geschrieben. Also wollte ich asynchrone Verarbeitung hinzufügen. Es gab jedoch einige Punkte, in denen ich feststeckte, also schrieb ich einen Artikel. Eine Sache, die ich zuerst sagen kann, ist, dass die asynchrone Verarbeitung in Python mit einem Nicht-Flask-Framework möglicherweise besser ist. Als ich gegoogelt wurde, hatte ich das Gefühl, dass andere Frameworks mehr Informationen hatten.
Der Benutzer gibt zwei Zahlen in das Textfeld ein und drückt eine Taste. Die Serverseite führt den Vorgang des Hinzufügens der beiden Nummern in einem asynchronen Prozess aus und gibt sofort eine Antwort an den Benutzer zurück.
os: Windows10 redis Redis-x64-3.0.504.msi
python 3.5.6 (Anaconda) Flask==1.1.1 celery==3.1.25 redis==2.10.6
Führen Sie "python sample.py" mit Anaconda Prompt aus.
Führen Sie in der Anaconda-Eingabeaufforderung "Sellerie - Beispiel. --Greifen Sie auf localhost: 9000 zu, geben Sie eine Zahl in das Textfeld ein und drücken Sie Berechnung ausführen.
Infolgedessen wird sofort eine Antwort zurückgegeben. Vergewissern Sie sich, dass das Berechnungsergebnis in der Anaconda-Eingabeaufforderung angezeigt wird, die Sellerie ausgeführt hat.
――Da die Versionen von Sellerie und Redis kompatibel sind, überprüfen Sie diese zuerst.
--Überprüfen Sie, ob Redis bei localhost ausgeführt wird: 6397.
--Überprüfen Sie, ob die asynchron zu verarbeitende Funktion in der Aufgabe Sellerie registriert ist. (Kann auf dem Terminal bestätigt werden, auf dem "Sellerie - Ein Beispiel.
Es ist einfach, aber ich habe unten sample.py und main.html angehängt. Es funktioniert mit diesen beiden Dateien. Ich habe auch die URL der Site angehängt, auf die ich verwiesen habe.
Wenn Sie Fragen oder Fehler haben, kommentieren Sie bitte.
sample.py
# coding=utf-8
from flask import Flask, render_template, request
#Vorbereitung der Kolben-App
app = Flask("sample")
# this is a part of celery property to use in Flask
from celery import Celery
def make_celery(app):
celery = Celery(
app.import_name,
backend=app.config['CELERY_RESULT_BACKEND'],
broker=app.config['CELERY_BROKER_URL']
)
celery.conf.update(app.config)
class ContextTask(celery.Task):
def __call__(self, *args, **kwargs):
with app.app_context():
return self.run(*args, **kwargs)
celery.Task = ContextTask
return celery
# update flask config to use celery
app.config.update(
CELERY_BROKER_URL='redis://localhost:6379',
CELERY_RESULT_BACKEND='redis://localhost:6379'
)
celery = make_celery(app)
@celery.task()
def add(a, b):
print(a + b)
return a + b
@app.route('/', methods=["GET", "POST"])
def sample():
#Verarbeitung bei POST
if request.method == 'POST':
return render_template(
'main.html', #HTML-Datei zum Anzeigen
)
#Verarbeitung zum Zeitpunkt von GET
else:
return render_template(
'main.html', #HTML-Datei zum Anzeigen
)
@app.route('/celery', methods=["POST"])
def celery_test():
if request.method == 'POST':
a = int(request.form["num_one"])
b = int(request.form["num_two"])
result = add.delay(a,b)
return render_template(
'main.html', #HTML-Datei zum Anzeigen
)
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=9000)
main.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8"/>
<title>Sample</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="jumbotron">
<h1>
<p align="center">
<font size="10">Asynchrone Verarbeitung des Kolbens</font>
</p>
</h1>
</div>
<form class="" method="post" action="/celery" enctype="multipart/form-data">
<div class="container" style="text-align: center;">
<input type="number" name="num_one"> +
<input type="number" name="num_two">
</div>
<div class="button_wrapper" style="text-align: center;">
<button type="submit" class="btn btn-lg btn-success" style="margin-top: 50px; ">Berechnungsausführung</button>
</div>
</form>
</div>
</body>
</html>
Installieren Sie Redis für Windows und probieren Sie es aus http://kageura.hatenadiary.jp Flaschenbeamter https://flask.palletsprojects.com/en/1.0.x/patterns/celery/ Python - Sellerie-Worker kann nicht gestartet werden https://codeday.me/jp/qa/20190525/900758.html celery AttributeError: 'str' object has no attribute 'items' django Day14 http://www.programmersought.com/article/8120463251/
Recommended Posts