yzk_wechat_event/apps/msg/utils.py

37 lines
1.1 KiB
Python

import json
from redis import StrictRedis
from django.conf import settings
from threading import Thread
from apps.msg.models import TbMessage
from yzk_wechat_event.settings.constant import Constant
class JQRMSGPubSubUtils:
rc = StrictRedis(host=settings.REDIS_HOST, port=settings.REDIS_PORT, db=0)
msg_list = []
BATCH_SIZE = 10
@classmethod
def publish(cls, data):
cls.rc.publish(Constant.JQR_MSG_PUBSUB_CHANNEL, json.dumps(data))
def listen():
pubsub = JQRMSGPubSubUtils.rc.pubsub()
pubsub.subscribe(Constant.JQR_MSG_PUBSUB_CHANNEL)
for msg in pubsub.listen():
print(msg)
if msg['type'] == 'message':
data = msg.get('data')
data = json.dumps(str(data))
JQRMSGPubSubUtils.msg_list.append(data)
if len(JQRMSGPubSubUtils.msg_list) >= JQRMSGPubSubUtils.BATCH_SIZE:
TbMessage.objects.bulk_create(JQRMSGPubSubUtils.msg_list[JQRMSGPubSubUtils.BATCH_SIZE:])
JQRMSGPubSubUtils.msg_list = JQRMSGPubSubUtils.msg_list[JQRMSGPubSubUtils.BATCH_SIZE:]
# t = Thread(target=listen)
# t.start()