notifier/services/listener.py

44 lines
1.1 KiB
Python
Raw Normal View History

2023-11-24 02:18:02 +00:00
import json
from services.rediscache import redis
from servies.notifier import notification_service
# Каналы для прослушивания
channels = ["reaction", "shout"]
pubsubs = []
def create_notification_channel(redis_conn, channel_name):
pubsub = redis_conn.pubsub()
pubsub.subscribe(channel_name)
return pubsub
def close_notification_channel(pubsub):
pubsub.unsubscribe()
pubsub.close()
def start():
# Подписка на каналы
pubsubs = [create_notification_channel(redis_conn, channel) for channel in channels]
try:
# Бесконечный цикл прослушивания
while True:
for pubsub in pubsubs:
msg = pubsub.get_message()
notification_service.handle_reaction(msg["data"])
except Exception:
pass
finally:
# Отписка от каналов при завершении
for pubsub in pubsubs:
close_notification_channel(pubsub)
def stop():
for pubsub in pubsubs:
close_notification_channel(pubsub)