2014-12-14 18 views
6

Tôi đang cố sử dụng Celery trong số Flask Example application của mình. Bởi vì tôi đang tạo ra ví dụ trong phương pháp Factory Tôi không thể sử dụng ví dụ từ tài liệu (http://flask.pocoo.org/docs/0.10/patterns/celery/)Tích hợp Flask với Celery

__init__.py

from celery import Celery 
from flask import Flask 
from config import config 


def create_app(): 
    app = Flask(__name__) 
    app.debug = True 
    app.config.from_object(config) 

    from .main import main as main_blueprint 
    app.register_blueprint(main_blueprint) 


    return app 

def make_celery(app = None): 
    app = app or create_app() 
    celery = Celery('app', backend=app.config['CELERY_RESULT_BACKEND'], broker=app.config['CELERY_BROKER_URL']) 
    celery.conf.update(app.config) 
    TaskBase = celery.Task 
    class ContextTask(TaskBase): 
     abstract = True 
     def __call__(self, *args, **kwargs): 
      with app.app_context(): 
       return TaskBase.__call__(self, *args, **kwargs) 
    celery.Task = ContextTask 
    return celery 

tasks.py

from app import make_celery 

celery = make_celery() 


@celery.task 
def add(a, b): 
    return a + b 

views.py

from flask import render_template 
from app.main import main 
from ..tasks import add 

@main.route('/', methods=['GET', 'POST']) 
def index(): 
    add.delay(5, 3) 
    return render_template('index.html') 

Tôi nhận được một error:

$ celery -A app.tasks worker 
 
Traceback (most recent call last): 
    File "...lib/python3.4/site-packages/celery/app/utils.py", line 229, in find_app 
    sym = symbol_by_name(app, imp=imp) 
    File "...lib/python3.4/site-packages/celery/bin/base.py", line 488, in symbol_by_name 
    return symbol_by_name(name, imp=imp) 
    File "...lib/python3.4/site-packages/kombu/utils/__init__.py", line 97, in symbol_by_name 
    return getattr(module, cls_name) if cls_name else module 
AttributeError: 'module' object has no attribute 'tasks' 
+0

Bạn không có tệp nào có tên 'app.py' để' tasks.py' không thể nhập từ đó. Ý bạn là 'từ'. import make_celery'? – dirn

Trả lời