Инструменты пользователя

Инструменты сайта


celery

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
celery [2018/12/18 12:30]
admin
celery [2019/10/01 16:13] (текущий)
Строка 5: Строка 5:
 <code>pip install celery</code> <code>pip install celery</code>
 Вуаля! Вуаля!
 +=====Запуск=====
 +Создадим простой модуль для проверки
 +<code python>from celery import Celery
 +
 +app = Celery('tasks', brocker='amqp://localhost')
 +
 +@app.task
 +def reverse(string):
 +    return string[::-1]
 +</code>
 + в cli запускаем celery
 +<code>celery -A tasks worker --loglevel=info</code>
 +Из другой cli проверяем
 +<code>reverse("nevvad")
 +# отправляем
 +revers.delay("nevvad")
 +</code>
 +В windows полетели ошибки
 +<code>celery ValueError: not enough values to unpack (expected 3, got 0)</code>
 +решения [[https://github.com/celery/celery/issues/4178|фикс зыс трабл]]
 +<code>
 +pip install eventlet
 +</code>
 +снова запускаем
 +<code>celery -A tasks worker --pool=eventlet -l info
 +# delay - пашет
 +</code>
 +=====Подключаем Базу данных=====
 +Документация по подключению бд искать на [[http://docs.celeryproject.org/en/latest/userguide/configuration.html#database-backend-settings|оффсайте]] celery \\
 +Дополнительно добавляем задержку на очередь в 10 сек.
 +<code python>
 +from celery import Celery
 +import time
 +
 +app= Celery('tasks', brocker='amqp://localhost', backend='db+sqlite:///celery.db')
 +
 +@app.task
 +def reverse(string):
 +    time.sleep(10)
 +    return string[::-1]
 +</code>
 +проверяем в cli
 +<code>
 +result = reverse.delay('nevvad')
 +# сразу смотрим статус
 +result.status
 +# получаем 
 +'PENDING'
 +# через несколько секунд еще раз смотрим статус, задержка отработала
 +'SUCCESS'
 +# так же все delay присутствуют в бд
 +</code>
 +еще проверка
 +<code>
 +result = reverse.delay('nevvad')
 +result.ready()
 +# получаем False
 +# через несколько секунд
 +# получаем True
 +
 +result.get()
 +'davven'
 +</code>
 +=====flask=====
 +Берем с [[http://flask.pocoo.org/docs/1.0/patterns/celery/|оффсайта]] колбы макет для celery называем task_celery.py
 +<code python>
 +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
 +</code>
 +Создаем модуль flask c именем celery_example.py
 +<code python>
 +from flask import Flask
 +from task_celery import make_celery
 +
 +app = Flask(__name__)
 +app.config['CELERY_BROKER_URL'] = 'amqp://localhost'
 +app.config['CELERY_RESULT_BACKEND'] = 'db+sqlite:///celery.db'
 +
 +celery = make_celery(app)
 +
 +@app.route('/process/<name>')
 +def process(name):
 +    return name
 +    
 +@celery.task(name='celery_example.reverse')
 +def reverse(string):
 +    return string[::-1]
 +
 +if __name__ == '__main__':
 +    app.run(debug=True)
 +</code>
 +стартуем celery
 +<code>
 +celery -A celery_example.celery worker --pool=eventlet -l info
 +</code>
 +проверяем в браузере
 +<code>http://127.0.0.1:5000/process/nevvad
 +проверяем бд, должна появится запись
 +</code>
 +=====Отправка почты=====
 +<code></code>
 +<code></code>
 +<code></code>
 +<code></code>
 +<code></code>
 +<code></code>
celery.1545125429.txt.gz · Последнее изменение: 2019/10/01 16:13 (внешнее изменение)