52 lines
1.7 KiB
Python
52 lines
1.7 KiB
Python
# coding: utf-8
|
|
# @Author: 小杨大帅哥
|
|
import queue
|
|
import time
|
|
from threading import Thread
|
|
|
|
class messageList(list):
|
|
def __init__(self, *args, **kwargs):
|
|
super(messageList, self).__init__(*args, **kwargs)
|
|
self.__isRunning = True
|
|
self.__th = None
|
|
self.__time_step = 3*60
|
|
self.__msg_queen = queue.Queue()
|
|
self.start()
|
|
|
|
def append(self, item) -> None:
|
|
self.__isRunning = True
|
|
if item['data'].get('msgid', None) is None:
|
|
return
|
|
super(messageList, self).append({str(item['data']['msgid']): item})
|
|
self.__msg_queen.put({'data': item, 'submit_time': time.time()})
|
|
|
|
def stop(self):
|
|
self.__isRunning = False
|
|
|
|
def find_msg(self, msgid):
|
|
msgid = str(msgid)
|
|
for msg_ele in self:
|
|
if str(msgid) == str(list(msg_ele.keys())[0]):
|
|
return msg_ele[msgid]
|
|
return None
|
|
|
|
def start(self):
|
|
def _start():
|
|
while True:
|
|
if self.__isRunning:
|
|
try:
|
|
new_data = self.__msg_queen.get()
|
|
now = time.time()
|
|
if now - new_data['submit_time'] >= self.__time_step:
|
|
self.remove({str(new_data['data']['data']['msgid']): new_data['data']})
|
|
continue
|
|
time.sleep(self.__time_step - (now - new_data['submit_time']))
|
|
self.remove({str(new_data['data']['data']['msgid']): new_data['data']})
|
|
except (queue.Empty, KeyboardInterrupt):
|
|
pass
|
|
self.__th = Thread(target=_start, name='run', daemon=True)
|
|
self.__th.start()
|
|
|
|
|
|
msg_list = messageList()
|