Forum: Italian Ruby user group Process.spawn con un blocco

33c7c2cca02b80f026c30039cf8e312c?d=identicon&s=25 Michele Boscolo (sphynx)
on 2016-06-15 17:22
Ciao a tutti ho visto la gemma parallel che mi permette di eseguire
codice in parallelo utilizzando tutte le CPU a disposizione(non thread),
solo che in windows non è supportato il fork, per cui mi stavo scrivendo
del codice per eseguire codice in parallelo quindo mi sono indirizzato
vero Process.spawn, solo che vorrei passargli come input un blocco di
codice da eseguire e non un altro programma es:

pid = Process.spawn do
       codice lungo da eseguire..
end

qualcuno sa se c'è qualche gemma o modo in cui posso fare questo, non
voglio farlo con i Thread ma utilizzare più processi, in modo da
utilizzare tutte le cpu presenti nella mia macchina.

Il mio scopo finale è implementare each e map, in modo da ciclare in
parallelo su una serie di dati
666b4ee5c26c5f60f0448ad0ab7777f3?d=identicon&s=25 Riccardo Tacconi (rtacconi)
on 2016-07-08 12:25
Prima di cercare gemme dovresti vedere se la standard library to offre
qualcosa (inoltre puoi imparare molto di piu`):
http://ruby-doc.org/core-2.2.0/Process.html#method-c-spawn
666b4ee5c26c5f60f0448ad0ab7777f3?d=identicon&s=25 Riccardo Tacconi (rtacconi)
on 2016-07-08 12:27
Guarda anche qui http://win32utils.rubyforge.org/ ti aggiunge fork su
windows!
666b4ee5c26c5f60f0448ad0ab7777f3?d=identicon&s=25 Riccardo Tacconi (rtacconi)
on 2016-07-08 12:27
gem install win32-process
33c7c2cca02b80f026c30039cf8e312c?d=identicon&s=25 Michele Boscolo (sphynx)
on 2016-07-08 13:08
Scusami ma forse non ci siamo capiti, ma il mio scopo era eseguire un
blocco di codice e non un programma esterno, comunque ho risolto cosi:

require 'childprocess'

THIS_FILE =  File.expand_path(__FILE__)
RUBY = Gem.ruby

ChildProcess.posix_spawn = true

def child_main()
  sleep 10
  puts "[child] Started"
end

if $PROGRAM_NAME == __FILE__
  puts "[parent] Started"

  proc = ChildProcess.build(RUBY, "-r#{THIS_FILE}", "-e", "child_main")
  proc.io.inherit!
  proc.start

  proc.wait
end
This topic is locked and can not be replied to.