Файл сельдерея не найден - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь проверить, работают ли команды log или print внутри моей задачи.

Когда я запускаю следующую команду:

сельдерей -A robobud.celery рабочий -f -l info

Он говорит мне, что моя задача дляначать и завершить, но я понятия не имею, действительно ли он запускал код внутри.

Пожалуйста, помогите мне выяснить, где находится этот файл журнала, о котором я продолжаю читать.

from __future__ import absolute_import
import time
import json
import logging
from channels.layers import get_channel_layer
from robobud.celery import app
from .models import Program



log = logging.getLogger(__name__)

@app.task
async def pump(program_id, amount1, amount2):
    # time sleep represent some long running process
    time.sleep(3)
    # Change task status to completed
    #program = Program.objects.get(pk=program_id)
    log.debug("Running progam_name=%s", program.name, amount1, amount2)

    #program.status = "completed"
    #program.save()
    print("pumping")
    print(program_id, amount1, amount2)

    #Chatroom name
    chat_room = "program" + str(program_id)
    print(chat_room)
    channel_layer = get_channel_layer()

    #Create Dictionary
    taskResponse = {
            "action": "completed",
            "program_id": program.id,
            "program_name": program.name,
            "program_status": program.status,
        }

    # Broadcasts the message to be sent
    await channel_layer.group_send(
        chat_room,
        {
            "type": "task_message",
            "text": json.dumps(taskResponse)
        }
    )

    @database_sync_to_async #Critical when pulling data from data using async
    def set_program_status(self, program_id):
        program = Program.objects.get(id=program_id)
        program.status = "Completed"  # change field
        program.save() # this will update only

    # Send status update back to browser client
    #if program_name is not None:
    #    Channel(reply_channel).send({
    #        "text": json.dumps ({
    #            "action": "completed",
    #            "program_id": program.id,
    #            "program_name": program.name,
    #            "program_status": program.status,
    #        })
    #    })

1 Ответ

0 голосов
/ 23 декабря 2018

Я не уверен, насколько хорошо сельдерей играет с asyncio, поскольку сельдерей является мультипроцессором, в то время как asyncio - это отдельный процесс, но вот простая задача, которая покажет вам, как использовать ведение журнала с сельдереем:


    from celery.utils.log import get_task_logger
    from robobud.celery import app


    log = get_task_logger(__name__)

    @app.task
    def logging_task(name):
        <b>log.info('hello %s', name)</b>

Небольшое замечание, как вы начали выращивать сельдерей, выглядит неправильно.Вы можете использовать следующий синтаксис для входа в stderr:

celery worker -A robobud.celery worker -l info

Эта команда, тем не менее, регистрирует только те сообщения, которые зарегистрированы в info или выше (то есть, не отлаживаются).Если вы хотите поместить вывод сельдерея в файл журнала, , вы можете использовать переключатель -f или --logfile, чтобы указать местоположение файла , например:

celery -A robobud.celery worker -f /var/log/celery/%h-%I.log -l info
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...