收到任务,但不是成功不是失败消息,如何解决?

Posted

技术标签:

【中文标题】收到任务,但不是成功不是失败消息,如何解决?【英文标题】:Received task, but not success not fail message, how to fix? 【发布时间】:2021-12-14 13:45:11 【问题描述】:

当我运行 celery 任务时,我得到了这个。 Windows 10,redis 芹菜 5。

[2021-10-29 19:08:18,216: INFO/MainProcess] Task update_orders[55790152-41c0-4d83-8874-4bd02754cb77] received
[2021-10-29 19:08:19,674: INFO/SpawnPoolWorker-8] child process 7196 calling self.run()

/

My celery.py
from __future__ import absolute_import, unicode_literals

import os
from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings.local')

BASE_REDIS_URL = os.environ.get('REDIS_URL', 'redis://localhost:6379')

app = Celery('src')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

app.conf.broker_url = BASE_REDIS_URL

@app.task(bind=True)
def debug_task(self):
    print("Request: 0!r".format(self.request))

app.conf.beat_scheduler = 'django_celery_beat.schedulers.DatabaseScheduler'

app.conf.worker_cancel_long_running_tasks_on_connection_loss = True

我的任务.py

import random
from celery import shared_task
from django.shortcuts import get_object_or_404
import datetime

from config.models import Config


@shared_task(name="update_orders")
def update_orders():
    print('Delayed')
    obj = Config.objects.all().order_by("-id").last()
    obj.orders_last_time_updated = datetime.datetime.now()
    obj.save()
    return True

我的设置

# CELERY STUFF
CELERY_BROKER_URL           = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND       = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT       = ['application/json']
CELERY_TASK_SERIALIZER      = 'json'
CELERY_RESULT_SERIALIZER    = 'json'
CELERY_TIMEZONE            = TIME_ZONE


DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
CELERY_RESULT_BACKEND = "django-db"

【问题讨论】:

请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。 【参考方案1】:

Celery 4.0+ 不正式支持窗口。但它仍然适用于某些开发/测试目的的窗口。

尝试安装 gevent:

pip install gevent

然后运行

celery -A projectname worker -l info -P gevent

这适用于窗口 10 + celery 5.1.2 + python 3.10

【讨论】:

以上是关于收到任务,但不是成功不是失败消息,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

[转] RabbitMQ 消息如何保证100%的投递成功

[转] RabbitMQ 消息如何保证100%的投递成功

“进程启动失败:未能获取进程 2282 的任务”如何解决这个问题?

Django实现自动发布(2视图-任务接收)

如何检查消息是不是存在? (discord.js)

如何知道我的消息是不是成功传送到 XMPP 服务器?