Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 注册芹菜定期任务以在django admin中查看它_Python_Django_Redis_Celery_Djcelery - Fatal编程技术网

Python 注册芹菜定期任务以在django admin中查看它

Python 注册芹菜定期任务以在django admin中查看它,python,django,redis,celery,djcelery,Python,Django,Redis,Celery,Djcelery,我试图在Django和芹菜中编写一些定期的背景任务 我的任务正在运行好吧,当我用beat scheduler启动芹菜工人时,我会定期启动这些任务: 芹菜-一个普通工人-B-l信息 如上图所示,我的任务被发现得很好。但是,已安装的应用程序上的自动发现没有按预期工作,因此我必须包括我要在芹菜实例化中查找任务的应用程序路径 要求 进入设置所在的基础应用程序: 芹菜 进入名为Device的模块应用程序 tasks.py 正如我所说,我的工作人员可以很好地发现任务,但Django中的管理页面没有看

我试图在Django和芹菜中编写一些定期的背景任务

我的任务正在运行好吧,当我用beat scheduler启动芹菜工人时,我会定期启动这些任务:
芹菜-一个普通工人-B-l信息

如上图所示,我的任务被发现得很好。但是,已安装的应用程序上的自动发现没有按预期工作,因此我必须包括我要在芹菜实例化中查找任务的应用程序路径

要求
进入设置所在的基础应用程序: 芹菜
进入名为Device的模块应用程序 tasks.py
正如我所说,我的工作人员可以很好地发现任务,但Django中的管理页面没有看到它

第一个问题:如何注册我的任务,以便在管理页面中查看它,当按其页面创建定期任务时?还是没用?

第二个问题:是否可以在管理员页面中看到硬编码的定期任务,而无需安装任何其他模块?有没有一种“内置”的方法可以做到这一点?或者,每次调用任务时,我是否可以尝试自己保存它

我的目标是让用户能够自行更改具有默认行为的任务的调度


提前感谢您的帮助!我希望我清楚了。

我也有同样的问题

我通过将这些行添加到proj/proj/__init__.py来修复它

from __future__ import absolute_import, unicode_literals

from .celery import app as celery_app

__all__ = ('celery_app',)
不确定这是最好的解决方案还是只是一个解决方案,但显然这将确保在Django启动共享任务时导入应用程序

from __future__ import absolute_import, unicode_literals

import os

from celery import Celery

from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'parifex.settings')

# Define the Celery configuration and include <app>.tasks to discover it
app = Celery('parifex', include=['device.tasks'])

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, force=True)


@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')
djcelery.setup_loader()
CELERYD_HIJACK_ROOT_LOGGER = False

# http://celery.readthedocs.org/en/latest/configuration.html#celery-redirect-stdouts-level
CELERY_REDIRECT_STDOUTS = True  # par défaut
CELERY_REDIRECT_STDOUTS_LEVEL = 'DEBUG'

CELERY_BROKER_URL = 'redis://:Redi$DB_withCelery@127.0.0.1:6234'
# store schedule in the DB:
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
CELERY_RESULT_BACKEND = 'redis://:Redi$DB_withCelery@127.0.0.1:6234'

CELERY_TASK_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT = ['json']  # Ignore other content
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Europe/Paris'
CELERY_ENABLE_UTC = True

CELERY_TRACK_STARTED = True
CELERYD_POOL_RESTARTS = True
from celery import shared_task
from celery.schedules import crontab
from celery.task import periodic_task
from django.core.serializers import serialize
from djcelery.schedulers import DatabaseScheduler, ModelEntry

from .models import Device
from .api.tools import TestDeviceApi


@shared_task
def count_devices():
    return Device.objects.count()


@shared_task(serializer='json', bind=True)
def get_devices_state():
    device_status = {}
    print(serialize('json', Device.objects.all()))
    for device in Device.objects.all():
        status = TestDeviceApi(device).ping()
        device_status[device.id] = (serialize('json', [device]), status)
    return device_status


@periodic_task(run_every=(crontab(minute='*/1')))
def print_random():
    print(15)
from __future__ import absolute_import, unicode_literals

from .celery import app as celery_app

__all__ = ('celery_app',)