Usar fork y process.wait en Rails

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 :slight_smile: 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 :slight_smile: 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 :stuck_out_tongue: