Process.spawn con un blocco


#1

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


#2

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


#3

Guarda anche qui http://win32utils.rubyforge.org/ ti aggiunge fork su
windows!


#4

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


#5

gem install win32-process