Queue-FIFO

import random import threading from datetime import datetime from queue import Queue class SingletonType: _instance_lock = threading.Lock() def __new__(cls, *args, **kwargs): if not hasattr(cls, "_instance"): with SingletonType._instance_lock: if not hasattr(cls, "_instance"): cls._instance = super(SingletonType, cls).__new__(cls, *args, **kwargs) return cls._instance class WaterFallAlarm(SingletonType): """瀑布圖報警數據模擬""" def __init__(self, size=10, timeout=2): self.size = size self.timeout = timeout self.queue = Queue(maxsize=self.size) @staticmethod def get_channel(): """隨機返回一個通道""" return random.choice([0, 1]) @staticmethod def get_point_list(): """隨機返回1000個點""" point_list = list(range(1000)) random.shuffle(point_list) return point_list @staticmethod def get_date_time(): """返回當前毫秒時間字符串""" return datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f")[:-3] def get_alarm_data(self): """產生一條報警數據""" alarm_data = { "channel": self.get_channel(), "data": self.get_point_list(), "createAt": self.get_date_time() } return alarm_data def put_queue(self, num=0): """數據入隊""" for item in range(num): if self.queue.qsize() < self.queue.maxsize: self.queue.put(self.get_alarm_data(), block=True, timeout=self.timeout) else: self.get_queue() def get_queue(self): """數據出隊""" if self.queue.qsize(): return self.queue.get(block=True, timeout=self.timeout) return None def run(self): """入隊+出隊""" self.put_queue(num=12) for item in range(self.queue.qsize()): print(self.get_queue()) print(self.queue.qsize()) if __name__ == '__main__': alarm = WaterFallAlarm() alarm.run()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章