Ejecutar programas con parámetros por threads

Hola,

estoy intentando llamar 6 programas desde un controlador, pasándoles
unos parámetros. La idea es hacer la llamada con threads, para que se
ejecuten en paralelo sobre ruby.

Suelo leer bastante y googlear antes de preguntar en un foro, que asi es
como se aprende, pero caso es que no encuentro bien la forma de hacerlo
y llevo ya un par de dias probnado y probando cosas.

Os pongo el ejemplo:

en el controller.rb:

param= “Hola”
a = Thread.new {exec(“program1.rb”, param) }
b = Thread.new {exec(“program2.rb”, param) }
c = Thread.new {exec(“program3.rb”, param) }
d = Thread.new {exec(“program4.rb”, param) }
e = Thread.new {exec(“program5.rb”, param) }
f = Thread.new {exec(“program6.rb”, param) }

a.join
b.join
c.join
d.join
e.join
f.join

en el program1(2,3,4,5,6).rb:

aux=ARGV[0]
unFichero1 = File.new(“fich.txt”, “w”)
unFichero1.print(aux)
unFichero1.close

En el controlador también he probado:
a.run
a.join
b.run
b.join
c.run
c.join
d.run
d.join
e.run
e.join
f.run
f.join

y también:
a.run
b.run
c.run
d.run
e.run
f.run

Y no me funciona.
Me he leido la documentación de thread también:
http://www.ruby-doc.org/core/classes/Thread.html

Alguna sugerencia? Qué estoy haciendo mal?

On Jan 15, 2008, at 11:41 AM, Mario M. wrote:

a = Thread.new {exec(“program1.rb”, param) }

exec substituye el proceso actual por el que lanzas, habria que usar
system.

exec “ls -1”
puts “esto no se ejecuta jamas”

– fxn

Vale, gracias por tu aportación :slight_smile:

Entonces en el controller.rb:

param= “Hola”
a = Thread.new {system(“program1.rb”, param) }
b = Thread.new {system(“program2.rb”, param) }
c = Thread.new {system(“program3.rb”, param) }
d = Thread.new {system(“program4.rb”, param) }
e = Thread.new {system(“program5.rb”, param) }
f = Thread.new {system(“program6.rb”, param) }

a.join
b.join
c.join
d.join
e.join
f.join

Esto no da error pero no produce los resultados esperados (no crea
ficheros, con lo que deduzco que no ejecuta los programas con los
parámetros)

Alguna sugerencia más? GRacias :wink:

param “Hola”
system “program1.rb #{param}”

On Jan 15, 2008, at 12:03 PM, Mario M. wrote:

f = Thread.new {system(“program6.rb”, param) }
parámetros)

Alguna sugerencia más? GRacias :wink:

Posted via http://www.ruby-forum.com/.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


name. Francesc E. i Martí
voice. +34 678.681.603

On Jan 15, 2008, at 12:03 PM, Mario M. wrote:

c.join
d.join
e.join
f.join

Esto no da error pero no produce los resultados esperados (no crea
ficheros, con lo que deduzco que no ejecuta los programas con los
parámetros)

No es buena idea confiar ahi silvestremente en cual es el working
directory, estas asumiendo que “program1.rb” vive justo en el cwd (que
es RAILS_ROOT por defecto pero tampoco es buena practica depender de
eso):

programs_dir = File.join(RAILS_ROOT, “path”, “to”, “programs_dir”)
Dir.chdir(programs_dir) do
a = …

end

Posiblemente sea eso.

– fxn

Muchas gracias a ambos. Os cuento como lo he hecho por si le sirve a
alguien:

param = “Hola”
programs_dir = File.join(RAILS_ROOT, “path”, “to”, “programs_dir”)
Dir.chdir(programs_dir) do
a = Thread.new {system(“at1.rb #{param}”) }
b = Thread.new {system(“last1.rb #{param}”) }
c = Thread.new {system(“ed1.rb #{param}”) }
d = Thread.new {system(“eb1.rb #{param}”) }
e = Thread.new {system(“rumb1.rb #{param}”) }
f = Thread.new {system(“mucho1.rb #{param}”) }

a.join
b.join
c.join
d.join
e.join
f.join
end

Saludos