1

複数のレポート(多くの場合100以上)を生成するために使用しているPythonベースのSSRSレポート生成ユーティリティがあります。設定方法は -

  1. 複数のスレッドが threading.Thread を使用して呼び出され、それぞれに辞書が与えられます。
  2. 各スレッドは辞書を解析し、python の subprocess.call を介して関連する引数を渡して rs.exe を呼び出します。

レポートは次の警告で生成されます -

  1. 約 20 ~ 30 件のレポートがある場合、すべて問題なく動作します。
  2. レポートの数が 40 ~ 50 以上になると (これまでのところ不明な理由により)、レポートの一部がレンダリングされず、subprocess.call ゼロ以外のステータス (サブプロセスからのエラー メッセージ) によって取得されたエラーが返されます。 .call は実際のエラーを指していません)。しかし、これらの rs.exe コマンドには、Windows コマンド プロンプトから実行するとレンダリングされるため、エラーはありません。
  3. さらに、失敗したレポートをすべて再実行しようとすると、レンダリングされます。再実行されている間、コマンドまたはデータに変更はありません。

これを回避するために、私は 2 回の反復に再試行ロジックを採用しました。ただし、レポートが 100/150+ を超えると、再試行しても機能しません。これで、再試行ロジックを拡張して、すべてのレポートがレンダリングされ、発生したエラーが本物のエラー (RDL が見つからない、破損したなど) になるまで再試行を続けることができます。しかし、そのようなことを行う前に、同時に起動できる rs.exe の数に制限があるかどうか、またはマルチスレッド コンテキストで呼び出されたときに python の subproces.call に制限があるかどうかを知りたいです。

この種の問題に直面して解決した場合、誰かが専門知識を共有できますか?

ありがとう。

4

1 に答える 1

0

到達している制限は、rs.exe 自体ではなく、対象のレポート サーバーであると思われます。これは利用可能な限り多くの物理メモリを使用しますが、それが使い果たされると、それ以降のリクエストは失敗し始めます。これは、SSRS doco で説明されています。

https://msdn.microsoft.com/en-us/library/ms159206.aspx

この問題を回避し、一部のサーバー リソースを他のユーザーに任せるために、スレッド制限を可能な限り低く (理想的には 1 に) 減らします。

于 2015-12-09T06:16:09.313 に答える