J'ai un projet simple de flacon/céleri basé sur this tutorial.Je ne peux pas lancer le serveur de moniteur de fleur pour le projet simple de flacon/céleri
L'arborescence des dossiers est la suivante:
ctest\
- templates\
- index.html
- app.py
- __init__.py
Le fichier index.html
est:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Sum</title>
</head>
<body>
<h2>Sum a number with 100</h2>
{% for message in get_flashed_messages() %}
<p style="color: red;">{{ message }}</p>
{% endfor %}
<form method="POST">
<p>Use number: <input type="text" name="number" value="{{ number }}"></p>
<input type="submit" name="submit" value="Add">
<input type="submit" name="submit" value="Add in 30 secs">
</form>
</body>
</html>
et app.py
est:
import os
from flask import Flask, request, render_template, session, flash, redirect, url_for
from celery import Celery
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
# initialize Flask
app = Flask(__name__)
# Celery broker and backend configuration
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0'
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0'
# Initialize extensions
app.config['SECRET_KEY'] = 'top-secret!'
# Initialize Celery
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'], backend=app.config['CELERY_RESULT_BACKEND'])
celery.conf.update(app.config)
@celery.task()
def make_async_sum(number):
with app.app_context():
logger.info("Executing....!")
return int(number) + 100
@app.route('/', methods=['GET','POST'])
def index():
# take the number from the form
if request.method == 'GET':
return render_template('index.html', number=session.get('number',''))
number = request.form['number']
session['number'] = number
if request.form['submit'] == 'Add':
# add now
make_async_sum.delay(number)
flash('Adding %s to 100'%number)
else:
# add later
make_async_sum.apply_async(args=[number], countdown=30)
flash('Adding %s to 100 , in 30 secs' % number)
return redirect(url_for('index'))
if __name__ == '__main__':
# use that host to be open from anywhere [cause I want to access it from outside the VM]
# use port 8181 [or smthing else] and not 8080
app.run(debug=True, host='0.0.0.0', port=8181)
Il est en cours d'exécution dans une Vagrant VM. Je peux accéder au index.html
à partir de mon navigateur hôte. Je peux SSH dans la VM et puiser dans le travailleur pour voir les tâches en cours de traitement avec celery worker -A app.celery --loglevel=info
. Mais, je n'arrive pas à démarrer l'outil de surveillance Flower pour ce projet.
J'essaye flower -A ctest
à partir du chemin du répertoire juste au-dessus de ctest\
mais j'obtiens l'erreur suivante.
Unknown Celery version
Traceback (most recent call last):
File "/usr/local/bin/flower", line 9, in <module>
load_entry_point('flower==0.9.1', 'console_scripts', 'flower')()
File "/usr/local/lib/python2.7/dist-packages/flower/__main__.py", line 11, in main
flower.execute_from_commandline()
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 279, in execute_from_commandline
argv = self.setup_app_from_commandline(argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 489, in setup_app_from_commandline
self._handle_user_preload_options(argv)
File "/usr/local/lib/python2.7/dist-packages/celery/bin/base.py", line 494, in _handle_user_preload_options
user_preload = tuple(self.app.user_options['preload'] or())
AttributeError: 'Flask' object has no attribute 'user_options'
Des idées?
fleur céleri -A ctest.app.celery a fait l'affaire! Ευχαριστω! –
Pas de problème :)! 'α 'σαι καλά !! –