Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2016 14:20:08

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Как узнать выполняет ли celery асинхронно функцию?

Прилагаю настройки celery

 # settings.py
# CELERY STUFF
BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
 # celery.py
from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings
#
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
app = Celery('backend')
#
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

 # tasks.py
import json
import requests
from celery.decorators import task
from celery.task.schedules import crontab
from celery.decorators import periodic_task
from celery.utils.log import get_task_logger
from api.controllers.message import message_delayed
logger = get_task_logger(__name__)
@periodic_task(
    run_every=(crontab(minute='*/1')),
    ignore_result=True
)
def period():
    # req = requests.get('')
    req = message_delayed()
    send(req)
    logger.info('task success')
@task
def send(mes):
    print('it works')
    # do_something

структура

в view.py оборачиваю функцию в task, добавил вывод print() чтоб посмотреть в worker работает или нет, в итоге ничего не выполняется, на серваке метод дергается, в task.py все работает отлично
При запуске worker выводит инфу что она находит этот таск

 [tasks]
  . api.tasks.period
  . api.tasks.send
  . api.views.user_get
  . backend.celery.debug_task

Все по идеи должно работать, но в итоге я не знаю работает ли, кто что подскажет?

Отредактировано Monkey_Dank (Ноя. 15, 2016 14:26:43)

Офлайн

#2 Ноя. 15, 2016 16:48:50

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Как узнать выполняет ли celery асинхронно функцию?

Кто-то логгирование отменил сегодня с утра? Пишем в лог и читаем лог

Офлайн

#3 Ноя. 15, 2016 16:55:36

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как узнать выполняет ли celery асинхронно функцию?

можно воспользоваться мониторингом Celery
Я использую Flower



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Ноя. 15, 2016 16:56:38

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Как узнать выполняет ли celery асинхронно функцию?

JOHN_16
Ты торопишься. Нужно прививать базовые понятие, что приложение должно (ключевое слово ДОЛЖНО) писать лог.

Офлайн

#5 Ноя. 15, 2016 17:14:38

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как узнать выполняет ли celery асинхронно функцию?

4kpt_IV
В целом ты конечно прав. =)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Ноя. 15, 2016 17:51:14

Monkey_Dank
Зарегистрирован: 2016-02-16
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Как узнать выполняет ли celery асинхронно функцию?

по поводу логирования, все делал как описано в доках

  # tasks.py
import json
import requests
from celery.decorators import task
from celery.task.schedules import crontab
from celery.decorators import periodic_task
from celery.utils.log import get_task_logger
from api.controllers.message import message_delayed
logger = get_task_logger(__name__)
@periodic_task(
    run_every=(crontab(minute='*/1')),
    ignore_result=True
)
def period():
    # req = requests.get('')
    req = message_delayed()
    send(req)
    logger.info('task success')
@task
def send(mes):
    print('it works')
    # do_something
возьмем как пример наш tasks.py в котором добавил все по интрукции, но к сожалению он не выводит лог в воркер
Почему так? если вы имеете ввиду логирование в консоль, а не файл

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version