我在数据库中查询要处理的项目集合,然后将集合拆分为批次,并分叉处理每个批次。类似于fork / join。
基本上,这就是它的样子:
STDOUT.puts {"started_at": Time.now.utc}.to_json
batch = DB[:items].all # batch will contain from 10k to 50k items
batch.each_slice(5_000) do |group|
fork do
group.each do |item|
rval = {...}
STDOUT.puts rval.to_json
end
end
end
results = Process.waitall
STDOUT.puts {"done": true, "finished_at": Time.now.utc}.to_json
每个子进程的输出是一条JSON记录,从几百字节到600 MiB的数据,全部在一行上。
两个子进程是否有可能相互破坏?