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

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


celery

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
celery [2018/12/18 12:38]
admin
celery [2019/10/01 16:13] (текущий)
Строка 15: Строка 15:
     return string[::-1]     return string[::-1]
 </code> </code>
-<code></code> + в cli запускаем celery 
-<code></code> +<code>celery -A tasks worker --loglevel=info</code> 
-<code></code> +Из другой cli проверяем 
-<code></code> +<code>reverse("nevvad"
-<code></code> +# отправляем 
-<code></code> +revers.delay("nevvad"
-<code></code>+</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>
celery.1545125917.txt.gz · Последнее изменение: 2019/10/01 16:13 (внешнее изменение)