2012-01-31 23 views
0

は、私は次の部品のアプリケーションを持っています。スクリプトを実行した後、クライアントのコンテンツに渡す必要がありますが、「ゲートウェイタイムアウト504」のエラーで接続が中断します。このエラーを回避するために私のケースで何が使えますか?長時間実行されているPythonスクリプト

+0

リクエストの6分が非常に遅いです、あなたのクライアントはあなたのプログラムについて楽しむことはありません。最初にセットアップキャッシュシステムを試して、dbを最適化してください(巨大なテーブルを持っている場合は、非正規化やスライスなど)。 – Denis

+0

スクリプトの実行をいくつかの部分に分割できますか? –

+0

いいえ、スクリプトを分割できません。そしてスクリプトはDBにクエリを作成せず、多くのコンテンツを送信しません。それは画像処理のためのアルゴリズムに過ぎませんが、結果を出すためにアルゴリズムにはある程度の時間(2〜6分)が必要です。そして私のクライアントは理解して、待っています。 – monax

答えて

2

だからあなたの目標は、スクリプトの実行時間を短縮するために、またはそれらに時間を持っていないことですか?ブラウザは、何を試しても6分のリクエストをあきらめてしまいます。

おそらく、AJAXリクエストで、その後の進歩のためのポーリングをサーバー上で仕事をしてみてください、と?

可能であれば、スクリプトを最適化してみてください。たとえば、SQLの処理がひどく遅い場合は、それを掃除してみてください。

そうでない場合は、より多くの情報がなく、より具体的な答えが得られにくいです。

+0

私はタイムアウトを避けたいです。スクリプトはイメージを処理するため、このアルゴリズムはより速く動作することができないため、私は貴重な最適化を行うことができません。 – monax

+0

多分、nginxとuwsgi(またはnginxとclient)間の接続時間を増やすために、nginxのソースコードを変更できますか? – monax

+2

AJAXは唯一の妥当な解決策であると思われます。サーバー上のバックグラウンドで処理を続行し、ユーザーに即座に「ステータス:処理」ページが返されます。 –

0

Iは一度「メインページ」がtext/plainのように長い実行中のプログラムの出力を示したIフレームを含んでいたシステムをセットアップします。私は、Iframeコンテンツのハンドラは、すべてのヘッダーを発行したPython CGIスクリプトであったとし、Apacheサーバーの下で行ごとに出力すると考えています。

あなたの設定でこれが動作するかどうかわかりません。

0

これは、サーバーの設定(クライアントにデータをプッシュするのがどれくらい簡単か)に大きく依存しますが、長時間のアプリケーションを実行して定期的に「ヌル」コンテンツを送信することは可能ですhtmlです)、ブラウザはこれが遅い接続であり、停止した接続ではないと思うようにします。

関連する問題