인프런 커뮤니티 질문&답변

AeGin님의 프로필 이미지

작성한 질문수

파이썬/장고로 웹채팅 서비스 만들기 (Feat. Channels) - 기본편

채팅방 삭제 구현

채팅방 삭제 관련 오류가 뭐때문인지 모르겠습니다..

23.03.06 16:44 작성

·

518

0

안녕하세요

새 프로젝트를 만들어서 강사님 강의대로 구현했을 때에는 에러가 뜨지 않았는데요

제가 하던 간단한 프로젝트에서 채팅기능 추가하려고 하니까, 에러가 나네요..

강의 동영상 7분전까지는 오류없이 채팅방 삭제가 잘 되었는데요. 8분쯤 나오는 채팅방 삭제에 따른 웹소켓 연결 끊기 부분에서 잘못된것 같습니다.

채팅방을 만든 상태에서 채팅방을 삭제하면

WebSocket DISCONNECT /ws/chat/11/chat/ [127.0.0.1:54878]
Task exception was never retrieved
future: <Task finished name='Task-335' coro=<Connection.disconnect() done, defined at /Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py:723> exception=RuntimeError("Task <Task pending name='Task-335' coro=<Connection.disconnect() running at /Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py:736>> got Future <Future pending> attached to a different loop")>
Traceback (most recent call last):
  File "/Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py", line 736, in disconnect
    await self._writer.wait_closed()  # type: ignore[union-attr]
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/streams.py", line 344, in wait_closed
    await self._protocol._get_close_waiter(self)
RuntimeError: Task <Task pending name='Task-335' coro=<Connection.disconnect() running at /Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py:736>> got Future <Future pending> attached to a different loop
Task exception was never retrieved
future: <Task finished name='Task-336' coro=<Connection.disconnect() done, defined at /Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py:723> exception=RuntimeError("Task <Task pending name='Task-336' coro=<Connection.disconnect() running at /Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py:736>> got Future <Future pending> attached to a different loop")>
Traceback (most recent call last):
  File "/Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py", line 736, in disconnect
    await self._writer.wait_closed()  # type: ignore[union-attr]
  File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/streams.py", line 344, in wait_closed
    await self._protocol._get_close_waiter(self)
RuntimeError: Task <Task pending name='Task-336' coro=<Connection.disconnect() running at /Users/hugo/Desktop/venv/chaegbang/lib/python3.10/site-packages/redis/asyncio/connection.py:736>> got Future <Future pending> attached to a different loop

이렇게 나옵니다. 검색해도 잘 모르겠습니다...

새로운 프로젝트만들어서 했을 때에는 이런 오류가 안떴는데 패키지 버전문제일까요??

답변 1

0

이진석님의 프로필 이미지
이진석
지식공유자

2023. 03. 06. 17:20

안녕하세요.

에러화면 만으로는 질문의 맥락을 모두 파악하기가 어렵네요.

위 오류의 재현과정을 순서대로 좀 더 상세히 설명해주시겠어요?

구현과정에 대한 맥락이 파악이 되어야, 제가 보다 좋은 답변을 드릴 수 있을 듯 합니다.

화이팅입니다. :-)

AeGin님의 프로필 이미지
AeGin
질문자

2023. 03. 06. 17:38

위 강의내용대로

views.py 에서 room_delete를 구현했고

urls.py 에서 라우팅 지정하고,

여기까지 한 다음에 템플릿에서 채팅방 삭제 url 버튼을 등록해서 삭제하면 제대로 채팅방이 삭제가 됐었습니다.

 

그런데, 채팅방을 삭제할 때 웹소켓을 통해서 채팅방 유저에게 채팅방 삭제를 알리는 구현과정에서,

def room__on_post_delete 시그널을 등록하고, ChatConsumer 에서 커스텀 종료코드와 함께 웹소켓 연결을 끊는 과정에서 뭔가 처리가 잘 안되는 것 같습니다.

채팅방을 삭제하기를 눌렀을 때, 제가 처음에 올린 에러 코드가 뜨구요...

근데, admin에서 채팅방을 삭제를 했을 때에는 modal창이 뜨면서 제대로 동작하네요

이진석님의 프로필 이미지
이진석
지식공유자

2023. 03. 06. 18:09

admin을 통한 삭제에서는 의도하신 대로 동작을 한다면, model signal은 동작을 한다고 봐야겠구요. 직접 뷰를 통한 삭제에서 뭔가 맞지 않는 부분이 있는 듯 합니다.

가능하다면 전체 프로젝트 코드와 함께, 제가 해당 이슈를 재현해볼 수 있도록, 오류 재현과정도 설명해주시면, 제가 보다 좋은 답변을 드릴 수 있을 듯 합니다.

AeGin님의 프로필 이미지

작성한 질문수

질문하기