Hola
Tengo que hacer varios calculos pesados con Ruby, y pensando que tengo
un procesador de doble nucleo utilice fork para reducirlo. Funcionó y
ahora tarda la mitad El problema es que al pasarlo a Rails, la web
carga antes de terminar el fork, pese a que pongo un Process.wait
El codigo es este, esta en el controlador:
@designs_array.each do |d|
d.gen_bits.start_creation(d.init_questions)
if d.init_questions['q1']!=3
d.gen_bits.mod_entries_bits(d.main_image.size_w,
d.main_image.size_h)
end
fork do
fuzzy_engine.run_fie(d)
d.generate_design_values
Compositor.new.create_png(d)
Kernel.exit
end
end
Process.wait
Pongo el bucle completo para que veáis donde coloco el Process.wait. En
Ruby sà se espera a terminar, pero al lanzarlo en Rails carga la página
antes de terminar, y necesito la información que genera antes de que
esta carga. ¿QUé debo hacer?
Victor M. wrote:
Hola
Tengo que hacer varios calculos pesados con Ruby, y pensando que tengo
un procesador de doble nucleo utilice fork para reducirlo. Funcionó y
ahora tarda la mitad El problema es que al pasarlo a Rails, la web
carga antes de terminar el fork, pese a que pongo un Process.wait
El codigo es este, esta en el controlador:
@designs_array.each do |d|
d.gen_bits.start_creation(d.init_questions)
if d.init_questions['q1']!=3
d.gen_bits.mod_entries_bits(d.main_image.size_w,
d.main_image.size_h)
end
fork do
fuzzy_engine.run_fie(d)
d.generate_design_values
Compositor.new.create_png(d)
Kernel.exit
end
end
Process.wait
Pongo el bucle completo para que veáis donde coloco el Process.wait. En
Ruby sà se espera a terminar, pero al lanzarlo en Rails carga la página
antes de terminar, y necesito la información que genera antes de que
esta carga. ¿QUé debo hacer?
Quiza tengas la facultad de executar un comando de sistema.
Si es asi intenta de lugar del fork ,crear un script de ruby el cual
haga el mismo trabajo que el fork y lo mandas llamar con un:
system(“script.rb arg1 arg2”)
Rodrigo B. wrote:
Quiza tengas la facultad de executar un comando de sistema.
Si es asi intenta de lugar del fork ,crear un script de ruby el cual
haga el mismo trabajo que el fork y lo mandas llamar con un:
system(“script.rb arg1 arg2”)
Hola Rodrigo,
El fork es solo para que se ejecuten dos procesos de la misma tarea a la
vez, de forma que tarde menos. No necesito llamar a otro proceso
distinto, sino que el mismo haga la tarea el doble de rápido