長いタスクを非同期で実行するために、アプリでセロリを使用しようとしています。私が持っているapplication.pyトッププロジェクトフォルダ内フラスコとセロリの大きなアプリケーション構造
:
from flask_stormpath import StormpathManager
from app import create_app
from celery import Celery
app = create_app('DevelopmentConfig')
stormpath_manager = StormpathManager(app)
celery = Celery(app.name, broker=app.config.from_object('CELERY_BROKER_URL'))
celery.conf.update(app.config)
if __name__ == '__main__':
app.run()
config.pyは次のようになります。
class Config:
SECRET_KEY = 'something_very_secret'
broker_url = 'sqs://'
broker_transport_options = {'region': 'eu-west-1',
'visibility_timeout': 3600,
'polling_interval': 0.3,
'queue_name_prefix': 'celery-'}
csrf = SECRET_KEY
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis: //localhost:6379/0'
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
JUST_SOMETHING = 'a_little_trick'
DEBUG = True
STORMPATH_API_KEY_FILE = '/.stormpath/apiKey.properties'
STORMPATH_APPLICATION = 'flask-test'
CELERY_BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis: //localhost:6379/0'
class ProductionConfig(Config):
JUST_SOMETHING = 'a_little_trick'
DEBUG = True
STORMPATH_API_KEY_FILE = '/.stormpath/apiKey.properties'
STORMPATH_APPLICATION = 'flask-test'
CELERY_BROKER_URL = 'sqs://'
config = {'development': DevelopmentConfig,
'default': DevelopmentConfig}
、私のviews.pyに私は、タスクを実行しよう:
from flask import render_template, flash, request, jsonify, Response
from wtforms import Form, validators, SelectMultipleField, widgets
from flask_stormpath import login_required
from . import main
import numpy as np
class MultiCheckboxField(SelectMultipleField):
widget = widgets.ListWidget(prefix_label=False)
option_widget = widgets.CheckboxInput()
@celery.task(bin=True)
def do_something(test, training_size, testing_size):
今のように実行すると、@ celery.taskという名前のセロリが定義されていないというメッセージが表示されます。私はそれを@ main.celery.taskに変更しました。私はこれを行うと、私はエラーメッセージ「はAttributeErrorを取得: 『青写真』オブジェクトが属性 『セロリ』を持っていない
その後、私はのinitの.pyファイルにセロリを開始しようとした:。
from flask import Flask
from celery import Celery
def create_app(config_name):
app = Flask(__name__)
configuration = "config."+config_name
app.config.from_object(configuration)
celery = Celery(app.name, broker=app.config.from_object('CELERY_BROKER_URL'))
celery.conf.update(app.config)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
return app
ImportError:CELERY_BROKER_URLという名前のモジュールがありません
セロリをインポートして開始する場所と、どこでcelery.taskをビューで使用できるように青写真を作成するかはわかりません.py。どんな助けも高く評価されるでしょう。
'app.configを[ 'CELERY_BROKER_URL']'は、設定をロードしていない、それをアクセスしています。 – davidism
まず、すべてのセロリのタスクを1つの 'module'に移動する必要があります。 'celery = Celery(...)'はあなたのモジュールでタスクを初期化する必要がありますが、 'def create_app'では初期化されません。 –