Я реализую оболочку вокруг структуры данных массива Python. Я делаю это по практическим соображениям в своем приложении, но этот примерный код предоставляется только для воспроизведения проблемы. Кажется, что массив не очищается для каждого запроса через абстракцию Tornado.Проблема кэширования оболочки класса Python/Tornado
Если я не использую абстракцию массива, нет проблем. Это заставляет меня думать, что в реализации CPython есть ошибка.
from tornado import websocket, web, ioloop
import json
class Array():
_data = []
def push(self, value):
self._data.append(value)
def json(self):
return json.dumps(self._data)
class ClientHandler(web.RequestHandler):
def prepare(self):
self.set_header("content-type", "application/json")
def get(self):
array = Array()
for i in range(0, 6):
array.push({'id': i})
self.write(array.json())
self.finish()
app = web.Application([
(r'/client', ClientHandler),
], debug=True)
if __name__ == '__main__':
kwargs = {"address": "127.0.0.1"}
app.listen(port=8888, **kwargs)
ioloop.IOLoop.instance().start()
Выход я получаю после обновления страницы, как только я начал процесс питон следующим образом в последовательности:
Последовательность 1
[{"id": 0}, {"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}]
Sequence 2
[{"id": 0}, {"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}, {"id": 0}, {"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}]
Последовательность 3
[{"id": 0}, {"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}, {"id": 0}, {"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}, {"id": 0}, {"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}]
Этот ответ является из не ожидаемые результаты. Ожидаемый выход должен иметь длину выходного массива JSON. Эта проблема НЕ выполняется, если я не обертываю структуру данных Python.
Почему это происходит? Я - новый восторженный пользователь Python, но этот тип препятствует мне использовать язык, если он не может справиться с простой абстракцией.
Extra
Для запуска этого:
- установить пакет Торнадо в
pip install tornado
, - сохранить код я предоставил в файле
app.py
- выполнить
python app.py
- открыт веб-приложение в вашем браузере для
http://127.0.0.1/client