通道和芹菜出错

时间:2018-04-17 22:59:14

标签: python django celery django-channels channels

我正在尝试创建一个聊天,当它满足“hola”条件时,由芹菜中的任务发送。但是,当它进入状态时状态没有更新,有人可以帮助我吗?

我留下我的代码,请帮助!

Mi错误是:

  

提出OSError(错误,'连接调用失败%s'%(地址,))   ConnectionRefusedError:[Errno 10061]连接呼叫失败(':: 1',6379)

consumers.py

    import json
from channels.generic.websocket import AsyncWebsocketConsumer
from .tasks import MensajeAlGrupo

class Consumidor(AsyncWebsocketConsumer):
    async def connect(self):
        # Join room group
        await self.channel_layer.group_add(
            'grupo',
            self.channel_name
        )
        await self.accept()

    async def disconnect(self, close_code):
        await self.channel_layer.group_discard(
            'grupo',
            self.channel_name
         )

    # Receive message from WebSocket
    async def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']
        if str(message) == "hola":
            MensajeAlGrupo.delay()
        else:

            # Send message to room group
            await self.channel_layer.group_send(
                'grupo',
                {
                    'type': 'chat_message',
                    'message': message
                }
            )

    # Receive message from room group
    async def chat_message(self, event):
        message = event['message']

        # Send message to WebSocket
        await self.send(text_data=json.dumps({
            'message': message
        }))

Tasks.py

    #De celery
from Filtros.celery import app
from channels.layers import get_channel_layer


@app.task()
def MensajeAlGrupo():
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        'grupo',
        {"type": "chat.message", "message": "Hello World"},
    )

请帮帮我,谢谢!

对不起我的英文:s

1 个答案:

答案 0 :(得分:0)

问题出现在windows中“localhost”的settings.py中,将“localhost”更改为127.0.0.1

<强> Settings.py

#------------------ CONFIGURACION DE LOS CHANNELS -----------------#
redis_host = os.environ.get('REDIS_HOST', '127.0.0.1')

# Channel layer definitions
CHANNEL_LAYERS = {
    "default": {
        # This example app uses the Redis channel layer implementation channels_redis
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [(redis_host, 6379)],
        },
    },
}

# ASGI_APPLICATION should be set to your outermost router
ASGI_APPLICATION = 'Filtros.routing.application'

#celery settings
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

<强> Celery.py

    from __future__ import absolute_import, unicode_literals
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'Filtros.settings')
app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')


# Load task modules from all registered Django app configs.
app.autodiscover_tasks()


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