私は、サードパーティの Web API からリアルタイム データを取得し、それを MySQL データベースに入れ、HTTP/JSON API 経由で利用できるようにする Web バックエンド/API プロバイダーに取り組んでいます。
API にフラスコを提供し、SQLAlchemy Core を使用して DB を操作しています。
リアルタイム データ取得部分については、リクエストを送信し、返された xml を解析して Python dict に変換し、それを返すことによってサード パーティ API をラップする関数があります。これらの API ラッパーを呼び出します。
次に、これらの関数を他のメソッド内で呼び出して、それぞれのデータを取得し、必要に応じて処理を行い (タイム ゾーンの変換など)、DB に配置します。これらをプロセッサと呼びます。
特に非同期 I/O とイベントレットについて読んでいて、非常に感銘を受けました。
これをデータ取得コードに組み込むつもりですが、最初にいくつか質問があります。
すべてにモンキーパッチを適用しても安全ですか? 私がフラスコ、SQLAlchemy、および他の多くのライブラリを持っていることを考えると、サルのパッチ適用にマイナス面はありますか (遅延バインディングがないと仮定します)?
タスクをどの程度の粒度で分割する必要がありますか? 定期的にプロセッサを生成するプールを作成することを考えていました。次に、プロセッサが API ラッパーを呼び出す部分に到達すると、API ラッパーは、eventlet.green.urllib2 を使用して実際の HTTP データを取得するために GreenPile を開始します。これは良いアプローチですか?
- タイムアウト - グリーンスレッドがハングしないようにしたい。greenthread ごとに eventlet.Timeout を 10 ~ 15 秒に設定するのは良い方法ですか?
参考までに、約 10 種類のリアルタイム データ セットがあり、プロセッサは 5 ~ 10 秒ごとに生成されます。
ありがとう!