问题如下:我自己开发了Django项目,并且Django项目中有多个app,我把他们集合到了apps,然后在项目文件(等同于dvadmin中的"application文件夹及其下属文件"),在该项目中,我创建了celery.py,并写入如下代码:
import os
from celery import platforms
from celery import Celery
from django.conf import settings
if 'DEBUG' in os.environ and os.environ['DEBUG'] == 'false':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Infinity.settings_docker')
else:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Infinity.settings_prod')
app = Celery('Infinity')
app.config_from_object(settings, namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
# 同时,我在同级目录下的__init__.py写入以下代码,由此希望将项目中的Celery实例导入到整个项目中的其他模块中,以便于使用Celery进行后台任务的处理:
from .celery import app as celery_app
__all__ = ('celery_app',)
当时我希望前端可直接套用"Simpleui",就可以快速实现前端展示,它只需要将"simpleui"和"import_export"注册到app即可,然而simpleui的功能并不完全适合我,我于是转战到dvadmin,当我阅读文件"application/celery"时发现,dvadmin似乎有着自己的celery,现在我希望能够同时运行自己的celery实例,同时运行dvadmin的celery实例,我该如何修改代码,求大神解答。。。
我修改了代码如下:
# application/__init__.py
from .celery import app_infinity, app as celery_app
__all__ = ('celery_app',)
# application/celery.py
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'application.settings')
from django.conf import settings
from celery import platforms
from celery import Celery
if "django_tenants" in settings.INSTALLED_APPS:
from tenant_schemas_celery.app import CeleryApp as TenantAwareCeleryApp
app_infinity = Celery('Infinity')
app = TenantAwareCeleryApp()
else:
from celery import Celery
app = Celery(f"application")
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
platforms.C_FORCE_ROOT = True
这样修改可以同时启用两个celery吗,求教@hongzai
可以具体说一下怎么实现吗,第一次用celery,不是太会,非常感谢非常感谢!!