为什么 Django Celery Beat 没有启动?

如何解决为什么 Django Celery Beat 没有启动?

我已经研究这个问题大约 4 天了,这让我非常沮丧。如果有人为我回答这个问题,我将不胜感激。我正在开发一个 Django 项目,该项目要求我定期检查媒体目录中的对象和一些文件,如果过时则将其删除。参考 celery documentation 后,我正确设置了一切(至少我认为),然后继续运行程序。我首先在一个终端窗口上运行我的项目,然后在另一个终端窗口上使用 redis-server 运行一个 redis 服务器。使用第三个终端窗口,我运行了以下命令:

(djangoenv) Daeyongs-Air:Data_Science_Project daeyong$ celery -A Data_Science_Project worker -l info
 
 -------------- celery@Daeyongs-Air.fios-router.home v5.0.5 (singularity)
--- ***** ----- 
-- ******* ---- macOS-10.16-x86_64-i386-64bit 2021-01-02 02:57:54
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         Data_Science_Project:0x7f9b0e59f1f0
- ** ---------- .> transport:   redis://localhost:6379//
- ** ---------- .> results:     redis://localhost:6379/
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery
                

[tasks]
  . Data_Science_Project.celery.test
  . task_number_one

[2021-01-02 02:57:55,154: INFO/MainProcess] Connected to redis://localhost:6379//
[2021-01-02 02:57:55,175: INFO/MainProcess] mingle: searching for neighbors
[2021-01-02 02:57:56,203: INFO/MainProcess] mingle: all alone
[2021-01-02 02:57:56,224: WARNING/MainProcess] /Users/daeyong/opt/anaconda3/envs/djangoenv/lib/python3.8/site-packages/celery/fixups/django.py:203: UserWarning: Using settings.DEBUG leads to a memory
            leak,never use this setting in production environments!
  warnings.warn('''Using settings.DEBUG leads to a memory

[2021-01-02 02:57:56,224: INFO/MainProcess] celery@Daeyongs-Air.fios-router.home ready.

所以我假设工人运行正常。对于我的最后一步,在第四个终端窗口中,我运行了以下命令:

(djangoenv) Daeyongs-Air:Data_Science_Project daeyong$ celery -A Data_Science_Project beat -l info
celery beat v5.0.5 (singularity) is starting.
__    -    ... __   -        _
LocalTime -> 2021-01-02 03:00:02
Configuration ->
    . broker -> redis://localhost:6379//
    . loader -> celery.loaders.app.AppLoader
    . scheduler -> celery.beat.PersistentScheduler
    . db -> celerybeat-schedule
    . logfile -> [stderr]@%INFO
    . maxinterval -> 5.00 minutes (300s)
[2021-01-02 03:00:02,894: INFO/MainProcess] beat: Starting...

但即使等待了几分钟,这也只是显示出来的,而不是正在运行的任务的视觉描述。当然,我曾尝试事先查看多个资源,但无济于事。我会将相关文件中的代码粘贴到下方

celeryconfig.py:

broker_url = 'redis://localhost:6379'
result_backend = 'redis://localhost:6379'
accept_content = ['application/json']
result_serializer = 'json'
task_serializer = 'json'
timezone = 'UTC'

celery.py:

from __future__ import absolute_import,unicode_literals
import os
from celery import Celery
from . import celeryconfig
from . import settings

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

app = Celery('Data_Science_Project')

app.config_from_object(celeryconfig)

@app.on_after_configure.connect
def setup_periodic_task(sender,**kwargs):
    sender.add_periodic_task(10.0,task_number_one())


app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task()
def test(arg):
    print(arg)

tasks.py:

from __future__ import absolute_import,unicode_literals
from celery import shared_task
from celery.utils.log import get_task_logger
from django.utils import timezone
from django.conf import settings
from Data_Science_Web_App.models import TemporaryFile
import datetime
import os

logger = get_task_logger(__name__)

@shared_task(name="task_number_one")
def task_number_one():
    logger.info("Task is running")
    print("Task is running")
    objects = TemporaryFile.objects.all()
    for object in objects.iterator():
        if object.time_created < datetime.datetime.Now()-datetime.timedelta(minutes=1):
            self_file = TemporaryFile.objects.get(pk = object.pk)
            data = object.data
            os.remove(os.path.join(MEDIA_ROOT,data))
            os.remove(os.path.join(BASE_DIR,data))
            self_file.delete()

init.py(这是项目的init文件):

from __future__ import absolute_import,unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app

__all__ = ['celery_app']

如果你想让我展示任何其他文件,请评论。 任何帮助将不胜感激!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?