44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
|
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)
|