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()