Ruby ArgumentError:在'load';中:封送数据太短
我想实现多个进程。我必须将在不同子进程中排序的数据发送回父进程,然后合并数据。这是我代码的一部分:Ruby ArgumentError:在'load';中:封送数据太短,ruby,Ruby,我想实现多个进程。我必须将在不同子进程中排序的数据发送回父进程,然后合并数据。这是我代码的一部分: rd1,wt1 = IO.pipe # reader & writer pid1 = fork { rd1.close numbers = Marshal.load(Marshal.dump(copylist[0,p])) bubble_sort(numbers) sList[0] = numbers.clone wt1.write Marshal.dump(sLis
rd1,wt1 = IO.pipe # reader & writer
pid1 = fork {
rd1.close
numbers = Marshal.load(Marshal.dump(copylist[0,p]))
bubble_sort(numbers)
sList[0] = numbers.clone
wt1.write Marshal.dump(sList[0])
Process.exit!(true)
}
Process.waitpid(pid1)
Process.waitpid(pid2)
wt1.close
wt2.close
pid5 = fork {
rd5.close
a = Marshal.load(rd1.gets)
b = Marshal.load(rd2.gets)
mList[0] = merge( a,b).clone
wt5.write Marshal.dump(mList[0])
Process.exit!(true)
}
有pid1
,pid7
,rd1
,rd7
,wt1
,wt7
pid1
…pid4
是冒泡排序4数据的一部分pid5
和6
合并来自pid1
、2
和PID3
、4
的数据。最后,pid7
合并来自pid5
和6
的数据
当数据大小较小时,它会成功,但当我输入较大的数据(10000)时:
然后,出现错误:
:在“加载”中:封送数据太短(ArgumentError)
和另一种错误:在“加载”中:需要IO实例(TypeError)
。第一个错误行位于pid5
:a=…
和pid6
:b=…
。另一种错误行位于pid7
:b=…
。我的数据是否太大,无法使用此方法?封送.load
和封送.dump
使用二进制数据。短读的问题在于:
a = Marshal.load(rd1.gets)
b = Marshal.load(rd2.gets)
#获取
读取到新行(或文件结尾),然后停止。问题在于,Marshal.dump创建的二进制数据中可能存在新行
将两行中的
改为读。@MudboyZh这太好了;不客气。既然您的代码可以工作,您可能希望将其提交给。我怀疑可以对其进行一些改进,但对工作代码的改进超出了本文的范围。CR也许能帮上忙。好的!我现在明白了。再次感谢你的帮助。我遇到了一个问题。当我输入更大尺寸的数据(30000,最大值为1000000)时,它将停留在wt.write….
方法write
是否有我必须注意的地方?@MudboyZh请将此作为一个新问题提问,使用常规代码、示例数据等。如果您愿意,新问题可以链接到此问题。对不起!这是我的新问题。
a = Marshal.load(rd1.gets)
b = Marshal.load(rd2.gets)