Я экспериментирую с написанием небольшого REST API с Flask. Поскольку я не хочу вводить базу данных на данный момент, я планирую хранить всю информацию, требуемую клиентами в памяти. Прямо сейчас задание cron собирает данные из Интернета, анализирует его и записывает результаты в файл. Задача REST API - предоставить эти данные частично (на основе входящих параметров) клиентам. Вот пример кода, который, по моему мнению будет делать эту работу:Как создать класс, который будет периодически обновлять свои переменные на основе содержимого файла
class DataAnalyzer:
TYPE_DAY = 'day'
TYPE_WEEK = 'week'
def __init__(self):
self.__daily_stats__ = []
self.__weekly_stats__ = []
def __load_stats__(self, daily_file, weekly_file, interval):
while True:
self.__daily_stats__ = [line.strip() for line in open(daily_file, 'r').readlines()]
self.__weekly_stats__ = [line.strip() for line in open(weekly_file, 'r').readlines()]
time.sleep(interval)
def start(self, daily_file, weekly_file, interval):
t = threading.Thread(target=self.__load_stats__, args=(daily_file, weekly_file, interval))
t.daemon = True
t.start()
def get_stats(self, stats_type, skip, count):
if stats_type == self.TYPE_WEEK:
data_to_filter = self.__weekly_stats__
elif stats_type == self.TYPE_DAY:
data_to_filter = self.__daily_stats__
else:
raise ValueError("Unknown type of statistics: '" + stats_type + "'")
result_list = itertools.islice(data_to_filter, skip, (skip + count))
return list(result_list)
Поскольку мой опыт питона очень низок, мне интересно, как это должно быть сделано для реального мира. Как добиться безопасности потока в этом случае?
Пожалуйста исправить отступы. – L3viathan
Что будет, когда файл будет изменен во время его чтения? – Jimilian
@Jimilian На самом деле я хотел бы избежать этой ситуации. Возможно ли каким-то образом заблокировать файл? – Zzokk