gpt4 book ai didi

ruby - 如何同时从 ruby​​ 运行 ruby​​ 脚本?

转载 作者:数据小太阳 更新时间:2023-10-29 08:15:54 25 4
gpt4 key购买 nike

我有一个名为 main.rb 的程序,我想执行以下操作:

system("ruby", "program1.rb")
sleep 60
system("ruby", "program2.rb")
sleep 60
system("ruby", "program3.rb")
sleep 60
system("ruby", "program4.rb")

puts "Programs are done running"

有没有一种方法可以在不让 program2 等到 program1 完成等等的情况下执行上述操作?我在想它可能必须为每个程序打开一个新的 CLI?另外,我想仅在所有 4 个都完成后才输出“程序已完成运行”消息。有没有办法做到这一点?谢谢!

最佳答案

您似乎希望每个程序同时运行,但希望在启动每个子程序之间等待 60 秒,然后等待所有程序完成。 Process::spawn本质上是 system 但后台返回其 pid 的子进程。这应该让你得到你想要的:

to_run = %w{program1.rb program2.rb program3.rb program4.rb}
pids = [ Process.spawn('ruby', to_run.first) ]
pids.concat to_run.drop(1).map{ |p| sleep(60); Process.spawn('ruby', p) }
Process.waitall
puts 'Everything done!'

如果您在其他地方生成了其他子进程,waitall将等待他们所有人。要仅等待您在此处生成的集合,请将上面的 Process.waitall 替换为循环 wait

pids.delete(wait) until pids.empty?

关于ruby - 如何同时从 ruby​​ 运行 ruby​​ 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15578748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com