【问题标题】:Debugging a potential integer overflow when using a batch submission system?使用批处理提交系统时调试潜在的整数溢出?
【发布时间】:2018-01-20 17:26:20
【问题描述】:

所以这是我的问题。我知道这不是一个很好问的问题,但这也是我问的部分原因:如何在这里寻求帮助?

所以我运行了一段用 Python 编写的代码。主进程使用 multiprocessing 模块产生一些其他进程。一旦这些进程完成,它们就会通过管道将结果发送到主进程。他们发送的基本上是一些 numpy 数组和浮点数。

还有一个大小不同的输入数据集,它被分成块并提供给每个工作进程。对于中小型尺寸,一切正常。但是,当数据点的数量约为 1,000,000 时,就会出现问题。

在我粘贴错误消息之前,我还要补充一点,我在使用 PBS 调度程序的系统上运行它。这就是为什么我很难调试它的原因:我不能只使用 pdb,而且需要几个小时才能产生错误。

无论如何,这是错误消息,您能给我任何提示如何修复它吗?有什么问题?或者我应该在这个问题中包含哪些更多信息?

Process Process-4:
Traceback (most recent call last):
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/process.py", line 249, in _bootstrap
    self.run()
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/glade/u/home/mjurek/.local/lib/python3.6/site-packages/pyMRA/MRANode.py", line 102, in __init__
    pipe.send(self)
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/connection.py", line 393, in _send_bytes
    header = struct.pack("!i", n)
struct.error: 'i' format requires -2147483648 <= number <= 2147483647
Process Process-3:
Traceback (most recent call last):
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/process.py", line 249, in _bootstrap
    self.run()
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/glade/u/home/mjurek/.local/lib/python3.6/site-packages/pyMRA/MRANode.py", line 102, in __init__
    pipe.send(self)
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/connection.py", line 206, in send
    self._send_bytes(_ForkingPickler.dumps(obj))
  File "/glade/u/apps/ch/opt/python/3.6.2/gnu/6.3.0/lib/python3.6/multiprocessing/connection.py", line 393, in _send_bytes
    header = struct.pack("!i", n)
struct.error: 'i' format requires -2147483648 <= number <= 2147483647

【问题讨论】:

    标签: python numpy multiprocessing pbs


    【解决方案1】:

    这是multiprocessing 的限制——您尝试发送的数据明显大于 2 GB,因此生成的腌制字符串的长度不适合 32 位整数(即你得到的例外)。您应该使用共享内存来传输它,而不是将其作为参数传递(它会腌制它)。

    issue #17560 on the bug tracker.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2010-11-14
      相关资源
      最近更新 更多