Celery 没有从五分之一的应用程序加载任务
Celery is not loading tasks from one app out of five
我在 celery.py 文件中使用自动发现来收集任务。直到最近选择了所有 app.tasks.py,我不确定为什么我的 config.tasks.py 功能不再被选择,但所有其他应用程序都被选择了。如果我从“config.tasks导入*”没有错误,我可以通过shell手动运行任务。
我试过在自动发现上使用 force=True 但没有效果,还有许多其他解决方案,none 似乎有任何效果,有人对接下来要检查的内容有任何想法吗?
谢谢
结构:
-config
--apps.py
--views.py
--models.py
--tasks.py
-monitoring
--apps.py
--views.py
--models.py
--tasks.py
-app
--apps.py
--settings.py
--celery.py
芹菜配置
from __future__ import absolute_import, unicode_literals
import os, django
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')
django.setup() # This is key
app = Celery("app")
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
if __name__ == '__main__':
app.start()
settings.py
CELERY_TIMEZONE = 'Europe/London'
ENABLE_UTC = True
CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
CELERY_TASK_TIME_LIMIT = 540
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'haystack',
'django_tables2',
'django_filters',
'django_celery_beat',
'config.apps.ConfigConfig',
'monitoring.apps.MonitoringConfig',
'storages',
'stdimage',
'simple_history',
'crispy_forms',
'rest_framework',
'rest_framework.authtoken',
)
tasks.py
from __future__ import absolute_import, unicode_literals
import requests, re, json, ipaddress, time, meraki, logging, random, gzip, diffios
from celery import chord, group
from app.celery import app
from django.conf import settings
from config.models import *
@app.task
def execute_command(device_id, cmd, user_id):
...
return output
控制台输出
celery_1 | -------------- celery@3504f0d9bb2e v4.3.1 (rhubarb)
celery_1 | ---- **** -----
celery_1 | --- * *** * -- Linux-4.19.121-linuxkit-x86_64-with-debian-9.7 2021-02-09 12:14:41
celery_1 | -- * - **** ---
celery_1 | - ** ---------- [config]
celery_1 | - ** ---------- .> app: app:0x7f82527f04a8
celery_1 | - ** ---------- .> transport: redis://redis:6379//
celery_1 | - ** ---------- .> results: redis://redis:6379/
celery_1 | - *** --- * --- .> concurrency: 30 (prefork)
celery_1 | -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
celery_1 | --- ***** -----
celery_1 | -------------- [queues]
celery_1 | .> celery exchange=celery(direct) key=celery
celery_1 |
celery_1 |
celery_1 | [tasks]
celery_1 | . app_settings.tasks.import_meraki_templates
celery_1 | . celery.accumulate
celery_1 | . celery.backend_cleanup
celery_1 | . celery.chain
celery_1 | . celery.chord
celery_1 | . celery.chord_unlock
celery_1 | . celery.chunks
celery_1 | . celery.group
celery_1 | . celery.map
celery_1 | . celery.starmap
celery_1 | . app.celery.debug_task
celery_1 | . monitoring.tasks.link_checks
celery_1 | . monitoring.tasks.service_checks
配置文件夹中是否有 __init__.py
文件?
我重建了我的 docker 容器,现在它们都重新加载了,不知道是什么原因造成的,但它正在工作!
我在 celery.py 文件中使用自动发现来收集任务。直到最近选择了所有 app.tasks.py,我不确定为什么我的 config.tasks.py 功能不再被选择,但所有其他应用程序都被选择了。如果我从“config.tasks导入*”没有错误,我可以通过shell手动运行任务。
我试过在自动发现上使用 force=True 但没有效果,还有许多其他解决方案,none 似乎有任何效果,有人对接下来要检查的内容有任何想法吗?
谢谢
结构:
-config
--apps.py
--views.py
--models.py
--tasks.py
-monitoring
--apps.py
--views.py
--models.py
--tasks.py
-app
--apps.py
--settings.py
--celery.py
芹菜配置
from __future__ import absolute_import, unicode_literals
import os, django
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')
django.setup() # This is key
app = Celery("app")
app.config_from_object('django.conf:settings', namespace='CELERY')
# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
if __name__ == '__main__':
app.start()
settings.py
CELERY_TIMEZONE = 'Europe/London'
ENABLE_UTC = True
CELERY_BROKER_URL = 'redis://redis:6379'
CELERY_RESULT_BACKEND = 'redis://redis:6379'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
CELERY_TASK_TIME_LIMIT = 540
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.humanize',
'haystack',
'django_tables2',
'django_filters',
'django_celery_beat',
'config.apps.ConfigConfig',
'monitoring.apps.MonitoringConfig',
'storages',
'stdimage',
'simple_history',
'crispy_forms',
'rest_framework',
'rest_framework.authtoken',
)
tasks.py
from __future__ import absolute_import, unicode_literals
import requests, re, json, ipaddress, time, meraki, logging, random, gzip, diffios
from celery import chord, group
from app.celery import app
from django.conf import settings
from config.models import *
@app.task
def execute_command(device_id, cmd, user_id):
...
return output
控制台输出
celery_1 | -------------- celery@3504f0d9bb2e v4.3.1 (rhubarb)
celery_1 | ---- **** -----
celery_1 | --- * *** * -- Linux-4.19.121-linuxkit-x86_64-with-debian-9.7 2021-02-09 12:14:41
celery_1 | -- * - **** ---
celery_1 | - ** ---------- [config]
celery_1 | - ** ---------- .> app: app:0x7f82527f04a8
celery_1 | - ** ---------- .> transport: redis://redis:6379//
celery_1 | - ** ---------- .> results: redis://redis:6379/
celery_1 | - *** --- * --- .> concurrency: 30 (prefork)
celery_1 | -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
celery_1 | --- ***** -----
celery_1 | -------------- [queues]
celery_1 | .> celery exchange=celery(direct) key=celery
celery_1 |
celery_1 |
celery_1 | [tasks]
celery_1 | . app_settings.tasks.import_meraki_templates
celery_1 | . celery.accumulate
celery_1 | . celery.backend_cleanup
celery_1 | . celery.chain
celery_1 | . celery.chord
celery_1 | . celery.chord_unlock
celery_1 | . celery.chunks
celery_1 | . celery.group
celery_1 | . celery.map
celery_1 | . celery.starmap
celery_1 | . app.celery.debug_task
celery_1 | . monitoring.tasks.link_checks
celery_1 | . monitoring.tasks.service_checks
配置文件夹中是否有 __init__.py
文件?
我重建了我的 docker 容器,现在它们都重新加载了,不知道是什么原因造成的,但它正在工作!