2015-10-14 3 views
1

Я делаю приложение в FLASK, и я включил в него Сельдерей. Тем не менее, я должен запустить приложение через терминал, если я хочу, чтобы работник Сельдерей также работал. (celery -A app.celery worker). Я попытался запустить его из главного run.py файла следующим образомЗапуск работника по сельдерей из приложения FLASK

init.py

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 
from flask.ext.mail import Mail 
from celery import Celery 
from kombu import serialization 


app = Flask(__name__) 
app.config.from_object('config') 
db = SQLAlchemy(app) 
mail = Mail(app) 
app.config['CELERY_BROKER_URL'] = 'redis://localhost:6379/0' 
app.config['CELERY_RESULT_BACKEND'] = 'redis://localhost:6379/0' 
app.config['CELERY_ACCEPT_CONTENT'] = ['json'] 
app.config['CELERY_TASK_SERIALIZER'] = 'json' 
app.config['CELERY_RESULT_SERIALIZER'] = 'json' 
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL']) 
celery.conf.update(app.config) 
serialization.registry._decoders.pop("application/x-python-serialize") 

from app import views 

и run.py

#!flask/bin/python 
from __future__ import absolute_import, unicode_literals 
from app import app 
# app.run(debug=True, port=9001) 

from celery import current_app  
from celery.bin import worker 

app = current_app._get_current_object() 

worker = worker.worker(app=app) 

options = { 
    'broker': app.config['CELERY_BROKER_URL'], 
    'loglevel': 'INFO', 
    'traceback': True, 
} 

worker.run(**options) 

Но это дает ошибку AttributeError: 'Celery' object has no attribute 'config'

Все указатели, чтобы то, что я делаю неправильно, было бы высоко оценено.

+0

Весь смысл сельдерей, чтобы запустить его как отдельный процесс, чтобы ваш веб-приложение может вхолостую вычислительно интенсивных задач к ней, так почему вы пытаетесь работать сельдерей в том же процессе, что и ваш webapp? –

+0

в основном, команда 'celery -App.работник 'запускает как работника сельдерея, так и основное приложение вместе. Я ищу эквивалент сценария python –

ответ

2

Ваш run.py должен быть:

#!flask/bin/python 
from __future__ import absolute_import, unicode_literals 
from app import app 
# app.run(debug=True, port=9001) 

from celery import current_app  
from celery.bin import worker 

application = current_app._get_current_object() 

worker = worker.worker(app=application) 

options = { 
    'broker': app.config['CELERY_BROKER_URL'], 
    'loglevel': 'INFO', 
    'traceback': True, 
} 

worker.run(**options) 
+0

, который запустил работника сельдерея, но основное приложение не работает –

+0

@ Irtza.QC, потому что скрипт даже не запускает основное приложение (комментарий «app.run') ... –

+0

Я еще не тестировал свой исходный код. Я просто вижу, что вы объявляете «приложение» два раза. Вы можете обратиться к моему примеру в https://github.com/thanhson1085/flask-celery-rabbitmq-generate-thumbnail, чтобы узнать, как работать с FLASK, CELERRY, RABBITMQ –

Смежные вопросы