Вы можете использовать данные в файловой системе /proc
, чтобы получить информацию о соответствии ЦП для запущенных процессов. Следующее должно дать вам количество процессоров, используемых в настоящее время (Примечание: у меня нет удобной коробки Linux или Ruby, так что этот код не протестирован, но вы можете понять)
def processors_in_use
procs=[]
Dir.glob("/proc/*/stat") {|filename|
next if File.directory?(filename)
this_proc=[]
File.open(filename) {|file| this_proc = file.gets.split.values_at(2,38)}
procs << this_proc[1].to_i if this_proc[0]=="R"
}
procs.uniq.length
end
def num_processors
IO.readlines("/proc/cpuinfo").delete_if{|x| x.index("processor")==nil}.length
end
def num_free_processors
num_processors - processors_in_use
end
def estimate_free_cpus(count, waittime)
results=[]
count.times {
results << num_free_processors
sleep(waittime)
}
sum=0
results.each {|x| sum += x}
(sum.to_f / results.length).round
end
Редактировать: Я убедился, что приведенный выше код работает (я использовал Ruby 1.9)