这是我使用Python,Flask,Socketio和Javascript创建的聊天应用程序项目的要求:
“邮件视图”:选择频道后,用户应查看该频道中已发送的所有邮件,最多100条邮件。您的应用应仅在服务器中每个频道存储100条最新邮件侧记忆。”
因此,我认为我应该做的是创建词典列表。像这样:
messages = [ {"user":"Dave", "message":"Hello", "time":"12-24-2018"}, {"user":"John", "message":"Test", "time":"12-21-2018"} ]
我的问题是..
答案 0 :(得分:0)
一种可能的解决方案是使用在标准库的collections包-collections.deque
中实现的双端队列。
双端队列与列表相似,但是支持两端高效的追加和弹出操作,具有线程安全性,并且可以指定为最大长度。
例如:
>>> dq = collections.deque(maxlen=5)
>>> for i, x in enumerate('abcde'):
... dq.append({x: i})
...
>>> dq
deque([{'a': 0}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4}], maxlen=5)
如果将元素添加到已设置 maxlen 且已达到最大大小的双端队列中,则会从双端队列的另一端删除一个元素:
>>> dq.append({'f': 5})
>>> dq
deque([{'b': 1}, {'c': 2}, {'d': 3}, {'e': 4}, {'f': 5}], maxlen=5)
>>> dq.appendleft({'z': 25})
>>> dq
deque([{'z': 25}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4}], maxlen=5)
值得注意的是,Python的json模块不处理双端队列,因此,如果要将双端队列转储到json,则需要提供一个将双端队列转换为列表的函数:
>>> json.dumps(dq)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
TypeError: Object of type deque is not JSON serializable
>>> def jdq(o):
... return list(o)
...
>>> json.dumps(dq, default=jdq)
'[{"z": 25}, {"b": 1}, {"c": 2}, {"d": 3}, {"e": 4}]'
要从json数组重新创建双端队列,只需将反序列化的列表传递给新的双端队列:
>>> L = json.loads('[{"z": 25}, {"b": 1}, {"c": 2}, {"d": 3}, {"e": 4}]')
>>> dq = collections.deque(L, maxlen=5)
>>> dq
deque([{'z': 25}, {'b': 1}, {'c': 2}, {'d': 3}, {'e': 4}], maxlen=5)