Flask Can';Don’不要让工人用烧瓶开芹菜

Flask Can';Don’不要让工人用烧瓶开芹菜,flask,celery,celery-task,Flask,Celery,Celery Task,我按照以下url中给出的示例运行芹菜烧瓶: 我逐字逐句地听。唯一的区别是,my make_芹菜函数是在以下层次结构下创建的: package1| |------CeleryObjCreator.py | CeleryObjectCraetor.py在CeleryObjectCreatorClass下具有make_芹菜函数,如下所示: from celery import Celery class CeleryObjectHelper: def m

我按照以下url中给出的示例运行芹菜烧瓶:

我逐字逐句地听。唯一的区别是,my make_芹菜函数是在以下层次结构下创建的:

package1|
        |------CeleryObjCreator.py
        |  
CeleryObjectCraetor.py在CeleryObjectCreatorClass下具有make_芹菜函数,如下所示:

from celery import Celery

class CeleryObjectHelper:
    def make_celery(self, app):
        celery = Celery(app.import_name, 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
$ celery -A your_application.celery worker
现在,我面临着启动芹菜工人的问题。 在文章的最后,它建议开始芹菜工人如下:

from celery import Celery

class CeleryObjectHelper:
    def make_celery(self, app):
        celery = Celery(app.import_name, 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
$ celery -A your_application.celery worker
在我的例子中,我使用的是不起作用的\u应用程序字符串,它给出了以下错误:

ImportError:没有名为“package1.celery”的模块

因此,我不确定在这里启动芹菜工人的应用程序字符串的值应该是多少

编辑 正如Nour Chawich所建议的,我确实尝试过从命令行运行Flask应用程序。我的服务器启动成功了。 此外,由于app是我的项目结构中app.py所在的目录,因此在app.py代码中,我将app=Flask(name)替换为Flask_app=Flask(name),以分离变量名 但当我试图用命令启动芹菜工人时

celery -A app.celery -loglevel=info
它无法识别代码中的以下导入

import app.myPackage as myPackage
它抛出以下错误

ImportError: No module named 'app'

所以我真的不确定这里发生了什么。有什么想法吗?

你为什么需要上课?您没有在代码提示中定义芹菜变量:在用Python编写代码时不要考虑Java:)我也是这样做的,因为没有类。只需创建一个名为flask_Cellery.py的文件,并将所有make_Cellery代码放在其中。现在,包含任务等的代码位于文件名examply.py中。因此,当我尝试使用$celery-A example.celery worker loglevel=info运行worker时,使用app的所有内容(例如从app.requests导入请求)在app中开始失败,其中app=Flask(name)。这是在我介绍了芹菜相关的东西之后发生的检查这个例子我的代码是完全相同的。但是,当我启动worker时,我无法在使用app的所有导入中识别app。此处app=烧瓶(名称)。失败的导入类似于app.classA导入cls。它开始给出ImportError:没有名为“app”的模块错误为什么需要使用类?您没有在代码提示中定义芹菜变量:在用Python编写代码时不要考虑Java:)我也是这样做的,因为没有类。只需创建一个名为flask_Cellery.py的文件,并将所有make_Cellery代码放在其中。现在,包含任务等的代码位于文件名examply.py中。因此,当我尝试使用$celery-A example.celery worker loglevel=info运行worker时,使用app的所有内容(例如从app.requests导入请求)在app中开始失败,其中app=Flask(name)。这是在我介绍了芹菜相关的东西之后发生的检查这个例子我的代码是完全相同的。但是,当我启动worker时,我无法在使用app的所有导入中识别app。此处app=烧瓶(名称)。失败的导入类似于app.classA导入cls。它开始出现错误:没有名为“app”的模块错误