1

我有一个基于 python 的 SSRS 报告生成实用程序,用于生成多个报告(通常超过 100 个)。它的设置方式是——

  1. 使用 threading.Thread 调用多个线程,每个线程都有一个字典。
  2. 每个线程解析字典并调用 rs.exe 通过 python 的 subprocess.call 传入相关参数

生成报告时需要注意以下事项 -

  1. 如果有大约 20-30 份报告,则一切正常,没有太多问题。
  2. 如果报告的数量超过 40-50+(到目前为止我不知道的原因),一些报告不会被渲染并返回错误,如 subprocess.call 非零状态(来自 subprocess 的错误消息.call 没有指向任何真正的错误)。但是这些 rs.exe 命令没有错误,因为当我从 Windows 命令提示符运行它们时它们会被渲染。
  3. 此外,当我尝试重新运行所有那些失败的报告时,它们会被渲染。命令或数据在重新运行时没有变化。

为了解决这个问题,我对 2 次迭代采用了重试逻辑,这似乎有时可以解决问题。但是,当报告超过 100/150+ 时,即使重试也不起作用。现在我可以扩展重试逻辑以继续重试,直到呈现所有报告并且发生的任何故障都是真正的故障(如 RDL 未找到、损坏等)。但在我做任何此类事情之前,想知道是否有任何限制可以同时启动多少个 rs.exe,或者在多线程上下文中调用 python 的 subproces.call 是否有任何限制。

如果有人遇到过此类问题并解决了,可以分享他们的专业知识吗?

谢谢。

4

1 回答 1

0

我怀疑您遇到的限制不是 rs.exe 本身,而是目标报表服务器。这将使用尽可能多的物理内存,但是当用尽时,进一步的请求将开始失败。这在 SSRS 文档中有描述:

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

为避免此问题并为其他用户保留一些服务器资源,我会将您的线程限制降低到您可以忍受的最低限度 - 理想情况下为 1。

于 2015-12-09T06:16:09.313 回答