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
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
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
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