Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 导致IOError的原因:错误的消息长度_Python_Multiprocessing - Fatal编程技术网

Python 导致IOError的原因:错误的消息长度

Python 导致IOError的原因:错误的消息长度,python,multiprocessing,Python,Multiprocessing,我正在使用python脚本从4D图像(功能性MRI扫描)中操作和提取信息。使用多处理软件包将部分分析设置为并行运行(针对每个主题): pool = Pool(processes=numberCores) resultList = pool.map(SubjectProcesser, argList) # where arglist is the list of arguments passed to the process 这些应用于不同类型的文件和不同类型的分析。对于一种特定类型的分析,我得

我正在使用python脚本从4D图像(功能性MRI扫描)中操作和提取信息。使用多处理软件包将部分分析设置为并行运行(针对每个主题):

pool = Pool(processes=numberCores)
resultList = pool.map(SubjectProcesser, argList) # where arglist is the list of arguments passed to the process
这些应用于不同类型的文件和不同类型的分析。对于一种特定类型的分析,我得到以下错误:

Process PoolWorker-1:
Traceback (most recent call last):
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
  self.run()
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/process.py", line 114, in run
  self._target(*self._args, **self._kwargs)
File "/home2/surchs/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/pool.py", line 99, in worker
  put((job, i, result))
File "/home2/user/epd/epd-7.2-2-rh5-x86_64/lib/python2.7/multiprocessing/queues.py", line 392, in put
  return send(obj)
IOError: bad message length
我把范围缩小到了失败的地步。并行进程显然执行OK(通过在脚本的不同阶段查看各种调试打印输出来确定),但是在结果的重新映射过程中失败了

我已搜索此错误消息,但尚未找到任何解决方案。由于我的脚本适用于所有其他类型的分析,我想知道可能会发生什么

关于分析,因为我想这是问题所在 不同的分析或多或少是对大脑中体素的时间序列提取(将大脑想象成一个三维矩阵,时间是第四维,矩阵元素称为体素)。大脑中的任何一点在每个时间点都有一个激活值。然后,时间序列是给定体素随时间变化的所有激活值的向量

然后计算所有体素之间的相关系数(通过体素给出一个具有维数的体素的平方相关矩阵),并返回所有相关系数(矩阵的下三角)的向量作为并行处理的输出

现在,对于所有没有抛出错误的分析,我将平均多个体素(基于区域节点),然后使用该区域的平均时间序列-有效地做两件事:

  • 大幅减少体素的数量(到区域的数量)
  • 去除始终为零的体素(作为平均值的结果。没有区域将仅包含零体素)
  • 相反,给出上述误差的分析使用了大脑中的所有体素时间序列,从而产生了更大的相关矩阵

    我试图通过屏蔽每个主题文件来消除零体素,而且,我没有得到任何“零除”错误,但这是我能想到的唯一两件事

    此外,如上所述,处理的并行部分毫无问题地贯穿始终。get错误在运行后抛出,可能是在重新映射结果期间


    任何帮助都将不胜感激。另外,如果我需要提供更多详细信息,请让我知道。

    当我从子进程返回的对象变得太大(在我的情况下是几十GB)时,我遇到了相同的问题。这些巨大的对象需要经过pickle处理,并通过进程通信发送回父进程,这可能是问题的原因。当然,即使我没有收到这个错误,移动几十GB的数据也是个坏主意。因此,我的解决方案是改变程序的结构,以消除传递如此大对象的需要

    你可以做的一件事就是使用。我在这方面运气不太好,因为我的对象非常复杂,如果不进行大量代码更改,就不容易在共享内存中创建,但您的对象可能更容易管理


    另请参阅另一个线程:。

    这是尚未解决的问题还是您自己已经解决了?