Python 导致IOError的原因:错误的消息长度
我正在使用python脚本从4D图像(功能性MRI扫描)中操作和提取信息。使用多处理软件包将部分分析设置为并行运行(针对每个主题):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 这些应用于不同类型的文件和不同类型的分析。对于一种特定类型的分析,我得
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(通过在脚本的不同阶段查看各种调试打印输出来确定),但是在结果的重新映射过程中失败了
我已搜索此错误消息,但尚未找到任何解决方案。由于我的脚本适用于所有其他类型的分析,我想知道可能会发生什么
关于分析,因为我想这是问题所在
不同的分析或多或少是对大脑中体素的时间序列提取(将大脑想象成一个三维矩阵,时间是第四维,矩阵元素称为体素)。大脑中的任何一点在每个时间点都有一个激活值。然后,时间序列是给定体素随时间变化的所有激活值的向量
然后计算所有体素之间的相关系数(通过体素给出一个具有维数的体素的平方相关矩阵),并返回所有相关系数(矩阵的下三角)的向量作为并行处理的输出
现在,对于所有没有抛出错误的分析,我将平均多个体素(基于区域节点),然后使用该区域的平均时间序列-有效地做两件事:
任何帮助都将不胜感激。另外,如果我需要提供更多详细信息,请让我知道。当我从子进程返回的对象变得太大(在我的情况下是几十GB)时,我遇到了相同的问题。这些巨大的对象需要经过pickle处理,并通过进程通信发送回父进程,这可能是问题的原因。当然,即使我没有收到这个错误,移动几十GB的数据也是个坏主意。因此,我的解决方案是改变程序的结构,以消除传递如此大对象的需要 你可以做的一件事就是使用。我在这方面运气不太好,因为我的对象非常复杂,如果不进行大量代码更改,就不容易在共享内存中创建,但您的对象可能更容易管理
另请参阅另一个线程:。这是尚未解决的问题还是您自己已经解决了?