如何解决为什么 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 举报,一经查实,本站将立刻删除。