notifier-draft-2
This commit is contained in:
43
services/listener.py
Normal file
43
services/listener.py
Normal file
@@ -0,0 +1,43 @@
|
||||
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)
|
Reference in New Issue
Block a user