Python 如何运行一组芹菜任务?应用程序不是';还没装呢

Python 如何运行一组芹菜任务?应用程序不是';还没装呢,python,django,celery,Python,Django,Celery,例如,我有两个任务:a和b。 我需要并行运行它们。我创建了一组任务并尝试运行它。但我有一个错误 proj/app/tasks.py @app.task def a(): pass @app.task def b(): pass from __future__ import absolute_import, unicode_literals from .celery import app as celery_app __all__ = ('celery_app',) fro

例如,我有两个任务:
a
b
。 我需要并行运行它们。我创建了一组任务并尝试运行它。但我有一个错误

proj/app/tasks.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
django.core.exceptions.AppRegistryNotReady:尚未加载应用程序

应用程序
app
已在
INSTALLED\u APPS
中注册,所有迁移都已完成

proj/proj/\uuuuu init\uuuuuu.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()

proj/proj/芹菜.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
回溯

File "/home/m0nte-cr1st0/test_projects/proj/proj/__init__.py", line 5, in <module>
    from .celery import app as celery_app
File "/home/m0nte-cr1st0/test_projects/proj/proj/celery.py", line 26, in <module>
    from app.tasks import a, b
File "/home/m0nte-cr1st0/test_projects/proj/app/tasks.py", line 14, in <module>
    from .models import Link, Prediction, PredictionBK
File "/home/m0nte-cr1st0/test_projects/proj/app/models.py", line 2, in <module>
    from django.contrib.auth.models import AbstractUser
文件“/home/m0nte-cr1st0/test_projects/proj/proj/_init__.py”,第5行,在
from.芹菜导入应用程序作为芹菜应用程序
文件“/home/m0nte-cr1st0/test_projects/proj/proj/芹菜.py”,第26行,在
从app.tasks导入a、b
文件“/home/m0nte-cr1st0/test_projects/proj/app/tasks.py”,第14行,在
from.models导入链接、预测、预测BK
文件“/home/m0nte-cr1st0/test_projects/proj/app/models.py”,第2行,在
从django.contrib.auth.models导入AbstractUser

确保执行以下操作:

  • 重置服务器

  • 重置芹菜工作池

如果这不能解决问题,请告诉我

此外,您不需要来自未来导入绝对导入、unicode文本的
。这仅用于python2兼容性

更新
我刚刚意识到您正在将它们导入芹菜文件(不确定是否可以这样做)。尝试删除任务导入,然后尝试在django shell中运行任务(运行
/manage.py shell
)。

确保执行以下操作:

  • 重置服务器

  • 重置芹菜工作池

如果这不能解决问题,请告诉我

此外,您不需要来自未来导入绝对导入、unicode文本的
。这仅用于python2兼容性

更新 我刚刚意识到您正在将它们导入芹菜文件(不确定是否可以这样做)。尝试删除任务导入,然后尝试在django shell中运行任务(运行
/manage.py shell
)。

proj/proj/芹菜.py
更改为:

从未来导入绝对导入,unicode文本
导入操作系统
从芹菜进口芹菜
os.environ.setdefault('DJANGO\u SETTINGS\u MODULE','proj.SETTINGS')
app=芹菜(“项目”)
app.config_from_对象('django.conf:settings'))
app.autodiscover_tasks()
@app.task(bind=True)
def调试_任务(自身):
打印('Request:{0!r}'。格式(self.Request))
进口django
django.setup()
来自芹菜进口集团
从app.tasks导入a、b
运行组=组(a.s(),b.s())
运行组()
将您的
proj/proj/芹菜.py
更改为:

从未来导入绝对导入,unicode文本
导入操作系统
从芹菜进口芹菜
os.environ.setdefault('DJANGO\u SETTINGS\u MODULE','proj.SETTINGS')
app=芹菜(“项目”)
app.config_from_对象('django.conf:settings'))
app.autodiscover_tasks()
@app.task(bind=True)
def调试_任务(自身):
打印('Request:{0!r}'。格式(self.Request))
进口django
django.setup()
来自芹菜进口集团
从app.tasks导入a、b
运行组=组(a.s(),b.s())
运行组()

这里有两个问题

首先,您不应该导入其他任务-这就是
app.autodiscover\u tasks()
的用途。从应用程序中删除行
。任务导入a、b


其次,您不应该调用
run\u group
。这适用于您希望在组中运行任务的时间。

这里有两个问题

首先,您不应该导入其他任务-这就是
app.autodiscover\u tasks()
的用途。从应用程序中删除行
。任务导入a、b


其次,您不应该调用
run\u group
。这适用于您希望在组中运行任务的时间。

proj/proj/芹菜.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
proj/proj/settings.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
proj/proj/\uuuuu init\uuuuuu.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
proj/app/tasks.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()

proj/proj/芹菜.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
proj/proj/settings.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
proj/proj/\uuuuu init\uuuuuu.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()
proj/app/tasks.py

@app.task
def a():
    pass

@app.task
def b():
    pass
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))


from celery import group
from app.tasks import a, b

run_group = group(a.s(), b.s())
run_group()
import os
from celery import Celery
from django.conf import settings

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

app = Celery('proj')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600}
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
from .celery import app as celery_app
from celery import group


@app.task
def a():
    pass


@app.task
def b():
    pass


run_group = group(a.s(), b.s())
run_group()


为什么在你的
\uu init\uuuuuuuuupy
中有来自.芹菜导入应用程序的
作为芹菜应用程序
?它的
应用程序任务
,而不是
应用程序任务
@DanielRoseman它允许
共享任务
检测它应该使用的应用程序。看起来你的设置有点配置不当。请参阅。为什么在您的
\uuu init\uuuuuuuuuupy
中有来自.芹菜导入应用程序的
?它的
应用程序任务
,而不是
应用程序任务
@DanielRoseman它允许
共享任务
检测它应该使用的应用程序。看起来您的设置不正确。请参阅。@БМицицицццццццццц。看看这是否有效。@БМцццццццццццццц。您能显示您的
设置.py
文件吗?@БМццццццццццццц。看看这是否有效。@БМцццццццццццццццццццц。你能显示你的
设置.py
文件吗?但我想在一个组中运行任务。是的。在那里定义
run_group
,就像您正在做的那样。但不要在那里说。如果要运行组,请调用它。好的。谢谢你的帮助。现在我得到错误
amqp.exceptions.accessdensed:(0,0):(403)访问被拒绝-使用身份验证机制AMQPLAIN拒绝登录。有关详细信息,请参阅代理日志文件。
这很奇怪。毕竟,我使用的是
redis
,错误与
rabbitmq
有关,但我想在组中运行任务。是的。在那里定义
run_group
,就像您正在做的那样。但不要在那里说。如果要运行组,请调用它。好的。谢谢你的帮助。现在我得到错误
amqp.exceptions.accessrejected:(0,0):