Я работаю над веб-сервером/поставщиком API, который захватывает данные в реальном времени от стороннего веб-API, помещает его в базу данных MySQL и делает его доступным через API HTTP/JSON.
Я предоставляю API флягой и работаю с БД с помощью ядра SQLAlchemy.
Для части захвата данных в реальном времени у меня есть функции, которые обертывают сторонний API, отправляя запрос, разыгрывая возвращенный xml в питоне Python и возвращая его. Мы будем называть эти обертки API.
Затем я вызываю эти функции в рамках других методов, которые принимают соответствующие данные, обрабатывают, если необходимо, (например, преобразования часовых поясов и т.д.) и помещают их в БД. Мы будем называть эти процессоры.
Я читал об асинхронных вводах и событиях, и я очень впечатлен.
Я собираюсь включить его в свой код захвата данных, но сначала у меня есть некоторые вопросы:
-
Безопасно ли мне обезглавить все? учитывая, что у меня есть фляга, SQLAlchemy и множество других libs, есть ли какие-либо недостатки для исправления обезьян (если нет позднего связывания)?
-
Какую степень детализации я должен разделить на свои задачи? Я подумывал создать пул, периодически создающий процессоры. Затем, как только процессор достигнет той части, где он вызывает обертки API, обертки API запустит GreenPile для получения фактических данных HTTP с помощью eventlet.green.urllib2. Это хороший подход?
- Тайм-ауты - я хочу убедиться, что greenthreads никогда не зависает. Это хороший подход для установки eventlet.Timeout до 10-15 секунд для каждого greenthread?
FYI, у меня около 10 различных наборов данных в реальном времени, и процессор генерируется каждые ~ 5-10 секунд.
Спасибо!