問題タブ [long-running-processes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 実行時間の長いタスクでの Winform の更新
アプリケーションが長時間実行されているタスクを実行している間、「お待ちください」winform を「ペイント」したままにするための良い解決策はありますか?
各ステップで form.refresh() を使用してみましたが、長時間実行されるクエリがいくつかあります。これは、これが十分な頻度ではないことを意味します。
基本的にこのSO質問ですが、VSTO(Pythonではなく)を介したExcelのC#で。
django - djangoでの長時間実行プロセスのグローバル状態
django でのフォーム送信に応答して、長時間実行されるプロセスを開始する必要があります。次に、ajax を使用してポーリングし、ビューにプロセスの状態 (開始、停止、または実行中) を応答させたいと考えています。さらに、プロセスを停止できるようにしたい。
だから私の見解は次のようになります:
この特定の質問は SO で何度も対処されていますが、私の状況は微妙に異なります。 完全に Pythonic であり、在庫の django にないものを必要とせず、データベースの使用を必要としないソリューションを探しています。
私が見つけた最も近いものはこの投稿です。私はコードを実装し、かなり合理化しましたが、request.session がグローバルではないことがわかりました (2 つのブラウザーが異なるセッションを持っています)。
request.session 以外のものを使用して start/stop/status 状態を保存することで問題を解決できるかもしれませんが、それが何であるかはわかりません。
私の読書で出くわした別の可能性はdjangoミドルウェアですが、これによると、
__init__() は、サーバーの起動時に 1 回だけ呼び出されます。個々の要求に対してではありません。
django のグローバルな状態について説明しているブログ記事もここにあります。何かご意見は?
asp.net - ASP.NET ページから長いプロセスを実行する方法
asp.netで2時間などの長いプロセスを実行し、進行状況についてクライアントに情報を返す最も成功した方法は何ですか.
Windows サービス、httphandler、およびリモート処理を作成すると成功すると聞いたことがあります。
wpf - すべてをバックグラウンドスレッドで実行する必要がありますか?
サーバー(データベースまたはインターネット)からのデータを待っている間にハングする可能性のあるアプリケーションを設計しています。問題は、時間がかかる可能性のあるさまざまな場所に対処するための最善の方法がわからないことです。
アクセスが行われている間、ユーザーに「読み込み中」ダイアログを表示できてうれしいですが、理想的には、これが短時間の操作で上にフリックして消えないようにします。
Microsoft Wordは、ボタンをクリックして操作に時間がかかるかのように、これを非常にうまく処理しているように見えます。数秒後に「動作中..」ダイアログが表示されます。操作はまだ同期しており、操作を中断することはできません。ただし、同じ操作がすぐに発生した場合は、明らかにダイアログが表示されません。
汎用のバックグラウンドワーカースレッドハンドラーを考案できてうれしいです。データ処理の99%はすでに静的アトミックメソッドで行われていますが、可能であれば、これについてベストプラクティスを実行したいと思います。
誰かがパターン、コード、または提案を持っているなら、私はそれらすべてを歓迎します
乾杯
c# - Windowsサービスからの長時間実行操作の処理
編集(もう一度):問題を単純化させてください。次のようなメソッドでいくつかのWCFエンドポイントを公開するWindowsサービスがあります。
メソッドを実装するための最良の方法は何ExecuteQuery
ですか?ThreadPool.QueueUserWorkItem
クエリを実行するために 電話する必要がありますか?
クエリの実行の背後にある実際の作業は、負荷分散されたブラックボックスによって行われることに注意してください。複数のクエリを同時に実行できるようにしたいと思います。
例えは、複数のファイルを同時にダウンロードするWebブラウザーであり、各ファイルのステータスを追跡できるダウンロードマネージャーがあります。
asp.net - Javascriptを使用したロングプロセスの進捗状況の更新
製品情報を更新する長いプロセスを開始するdllを呼び出すasp.netページがあります。プロセスの実行中に、そのプロセスがオンになっている製品と製品のステータスに関する最新情報をユーザーに提供したいと思います。私はこれを機能させるのに苦労してきました。ログテキストファイルに情報を追加し、新しいページにリダイレクトして、そのページにJavascriptを使用して数秒ごとにテキストファイルから読み取るようにしようと考えていました。私の質問は、他の誰かがこれを試したことがあり、それはかなりうまく機能するかどうかです。
c# - wpf ウィンドウの更新は最初は機能し、その後停止します
ディレクトリ内のすべての画像のリストを取得し、それらすべてに対して MD5 ダイジェストを実行するルーチンがあります。これには時間がかかるため、プログレス バーを含むウィンドウをポップアップ表示します。プログレス バーは、実行時間の長いルーチンに渡すラムダによって更新されます。
最初の問題は、進行状況ウィンドウが更新されないことでした (これは WPF では正常だと思います)。WPF にはRefresh()
コマンドがないため、 への呼び出しでこれを修正しましたDispatcher.Invoke()
。プログレスバーがしばらく更新された後、ウィンドウの更新が停止します。長時間実行されている作業は最終的に終了し、ウィンドウは通常に戻ります。
私はすでに BackgroundWorker を試しましたが、長時間実行されるプロセスによってトリガーされるイベントに関連するスレッドの問題にすぐに不満を感じました。それが本当に最善の解決策であり、パラダイムをよりよく学ぶ必要がある場合は、そう言ってください.
しかし、ここで得たアプローチには本当に満足していますが、少しすると更新が停止します (たとえば、1000 個のファイルを含むフォルダーでは、50 ~ 100 個のファイルが更新されてから「ハング」する可能性があります)。 . 進行状況を報告する場合を除いて、このアクティビティ中に UI が応答する必要はありません。
とにかく、ここにコードがあります。まず進行状況ウィンドウ自体:
長時間実行される方法 (Gallery.cs 内):
したがって、これは次のように呼ばれます。
asp.net - 長時間実行されるASP.NETタスク
これを行うAPIがたくさんあることは知っていますが、ホスティング環境(ASP.NET)では、別のスレッドで確実に実行できることを制限していることも知っています。
私は完全に間違っている可能性があるので、私がそうである場合は私を訂正してください、しかしこれは私が知っていると思うことです。
- 通常、要求は120秒後にタイムアウトします(これは構成可能です)が、最終的にASP.NETランタイムは、完了するのに時間がかかりすぎる要求を強制終了します。
- ホスティング環境(通常はIIS)はプロセスのリサイクルを採用しており、いつでもアプリのリサイクルを決定できます。これが発生すると、すべてのスレッドが中止され、アプリが再起動します。しかし、それがどれほど積極的かはわかりません。通常の進行中のHTTPリクエストを中止すると考えるのはちょっとばかげていますが、スレッドの作業単位について何も知らないため、スレッドを中止することを期待します。スレッド。
簡単かつ確実に理論的に長時間実行するタスクを実行するプログラミングモデルを作成する必要がある場合、それは数日間実行する必要がありますが、ASP.NETアプリケーション内からこれをどのように実現しますか?
この問題についての私の考えは次のとおりです。
私は、win32サービスでWCFサービスをホストするという長い道のりを考えてきました。そして、WCFを介してサービスに話しかけます。ただし、これを選択する唯一の理由は、いくつかの異なるWebアプリからタスク(作業単位)を送信することであるため、これはあまり実用的ではありません。その後、最終的にサービスにステータスの更新を依頼し、それに応じて行動します。これに関する私の最大の懸念は、サービスがいくつかの命令を実行できるようにするためにすべてのタスクをサービスにデプロイする必要がある場合、それは特に素晴らしい経験ではないということです。この入力の問題もあります。大きなデータセットがあり、それをかみ砕く必要がある場合、このサービスにデータをどのように提供しますか?
私が今よくしているのはこれです
これにより、SQL Serverデータベースを作業キューとして使用し、このクエリを使用してデータベースを定期的にポーリングして作業を行うことができます。作業項目が正常に完了した場合、それを完了としてマークし、それ以上何もすることがなくなるまで続行します。私が嫌いなのは、理論的にはいつでも中断される可能性があり、成功と完了のマークの中間にある場合、同じ作業項目を2回処理してしまう可能性があることです。私は少し妄想的かもしれませんし、これはすべて問題ないかもしれませんが、私が理解しているように、それが起こらないという保証はありません...
私は以前にSOについて同様の質問があったことを知っていますが、決定的な答えで実際には答えません。これは非常に一般的なことですが、ASP.NETホスティング環境は長時間実行される作業を処理するための設備が整っていません。
あなたの考えを共有してください。
java - 長期にわたる統計プロセス - 言語の選択について考えていますか?
管理している Web サイトのLAMPスタックを使用しています。使用統計 (デスクトップ製品に関連するさまざまなもの) をまとめる必要があります。
私は最初、PHP でこの問題に取り組みました (既にデータを操作するためのクラスがたくさんあるためです)。5.3を使用していた私の開発ボックスではすべてうまくいきました。
簡単に言うと、5.1 のメモリ管理はかなりひどいようで、長期ロールアップ スクリプトを固定メモリ空間で実行するために、多くのばかげたことをしなければなりませんでした。私たちのサーバー担当者は、現時点では PHP をアップグレードするつもりはありません。その後、開発サーバーを 5.1 に戻したので、この問題に再び遭遇することはありません。
MySQL データベースのマイニングでさまざまな期間と解像度の統計をロールアップし、(cron スケジュールではなく) 将来にわたって常にこれを実行するプロセスを実行する可能性がある場合、どの言語を選択することをお勧めしますか? 私は Python (多かれ少なかれ知っている)、Java (あまりよく知らない)、または PHP (かなりよく知っている) でそれを突き出していました。
編集:コメンターのデザインの明確化
解決策: ロールアップ スクリプトが現在機能する方法は、解決策とバケットを定義するためのクラスがいくつかあることです。私は年、月、週、日を持っています - 「バケット番号」が与えられると、各クラスはそのバケットの時間範囲を定義する開始と終了のタイムスタンプを与えます - これは任意のエポック日付に基づいています。システムは「完全な」記録を維持します。つまり、現在、最後に実行されてから各解像度のロールアップされたデータセットを完成させます。
SQL Strat: 基本統計は、多くの異なるスキーマとテーブルにあります。ほとんどの場合、ロールアップされた統計ごとに個別のクエリを実行してから、挿入用に 1 つのレコードを入力します。次のようなネストされたサブクエリを提案しています。
roll_up_stats (someval、someval、someval、...) に INSERT (someschema から SUM(somestat) を選択、someschema2 から AVG(somestat2) を選択)
これらのサブクエリは一時テーブルを生成しますよね? 私の経験では、過去に糖蜜のように遅かったです。それはより良いアプローチですか?
編集 2: 質問にいくつかのインライン応答を追加する
5.1 php の場合、言語がボトルネックでした -- 基本的に、言語の選択が間違っていると言われました (スクリプトは 5.3 では問題なく動作しましたが)。あなたは、私がこのタスクのためにチェックアウトしているpythonについて言及しています。明確にするために、私がやっていることは、デスクトップ製品の使用統計の管理ツールを提供することです (ログは実際には EJB サーバーによって mysql テーブルに書き込まれます)。私は apache ログ ファイルの分析と、Web 側でより多くのカスタム Web レポートを行っていますが、このプロジェクトは別です。私がこれまでに取ったアプローチは集計テーブルです。これらのメッセージ キュー製品で何ができるかわかりませんが、調べてみます。
さらに言えば、データは、サービスおよび顧客レベルで経時的なアクティビティをグラフ化するために使用され、管理者が製品がどのように使用されているかを理解できるようにします。期間 (4 月 1 日から 4 月 10 日まで) を選択し、選択した期間に応じて、特定の機能の合計使用時間 (時間、日、月など) のグラフを取得できます。その本質的には、使用状況の事後分析です。ただし、必要性はリアルタイムに向かっているようです (最後の 1 時間の使用状況を見てください)。
php - 長いプロセスphp
非常に長いphpスクリプトを実行する必要があります(4時間半、5時間)。
スクリプトは正常に実行されることもありますが、不可解に強制終了されることもあります(共有ホスティングと関係があるのでしょうか??)。
スクリプトを実行するための解決策は、おそらく小さなチャンクだと思います。
これを行うために、位置を移動する前に、そのステータスと位置をxmlファイルに格納し、スクリプトの1つのチャンクを実行するスクリプトを作成しました。
スクリプトの最後のビットを接続する際に問題が発生しました。これにより、現在のプロセスが終了し、スクリプトが再実行されます。
または多分私は間違った木を完全に吠えています!
私はSOや他の場所で見つけることができるものを読み通しましたが、それでも私は賢明ではありません:(
助けてください!!!
ダン