2011-10-21 13 views
3

状況は次のとおりです。Pythonスクリプトを連続して処理し、最終的にはmysqlにデータを書き込んでいます。エラー率とスクリプトのパフォーマンスを分析するにはログが必要です。PythonとPHPのための非同期ログ戦略

また、mysqlデータとやりとりするphpフロントエンドもあります。また、ユーザーの行動を記録して、行動を分析し、スコアリング関数を計算する必要があります。 私たちは、それぞれのケース( "pythonスクリプト"ログ用と "ユーザアクション"ログ用)についてそれぞれmysqlテーブルテーブルを持つことを考えました。

理想的には、パフォーマンスと待ち時間の理由から、非同期的にthseseログテーブルに書き込むことになります。 Python(これはORM django ORMを使用しています)とPHP(これはYii Frameworkを使用しています)でそうする方法はありますか?

この問題を解決する方法はありますか?

更新:ユーザーアクションのため 、(ウェブUI)は、我々は今、単純なApacheの設定によって自動的に関連したセッション情報を使用してMySQLにApacheのログをロード検討している

答えて

2

(私の知る限り)唯一の二つの方法がありますPHPで-同期何かをする:

  • フォークプロセスを
  • exec()プロセス(pcntl_fork必要)およびを追加(* NIXと仮定)でそれを解放をコマンド文字列の最後に追加します。

これらのアプローチはいずれも、一時的ではあるが、パフォーマンスの向上が議論の余地があり、サーバー環境に大きく依存するかどうかにかかわらず、新しいプロセスを作成します。もしあなたのデータベースが非常に負荷が大きい(それゆえあなたを減速させている)ならば、ログメッセージをファイルにダンプし、DBに入るものをクロールするデーモンスクリプトを持っている方がより速い結果を得るかもしれません。これが助けになるかどうかは議論の余地がある。

Python supports multi-threadingこれは人生を楽にします。

+0

独立したHTTPサーバー経由のログ記録はどうですか? – jaz

+3

@jaz - HTTPリクエストを送信するよりも速くログファイルに追加することが期待されます。 –

2

未処理のUnixまたはネットワークソケットを、メッセージをキャッシュしてディスクまたはデータベースに非同期で書き込むロギングサービスに開くことができます。 PHPとPythonのプロセスが長時間実行され、実行ごとに多くのメッセージが生成された場合、オープンソケットを維持する方が別々のHTTP /データベース要求を同期させるよりもパフォーマンスが向上します。

ファイルの追加(1回開いてからロック、シーク、書き込み、ロックを解除して実行中に終了し、最後に閉じる)と比較して測定する必要があります。

+0

+1 - ノンブロッキングソケットを忘れていて、非ブロッキングファイルストリームのためにこれも(おそらくPyでは本当に私の専門ではない)PHPでも動作するはずです。 – DaveRandom

関連する問題