Вы можете сделать это с помощью асинхронных рабочих процессов F # и распараллелить ваши запросы, используя Async.Parallel
. Вам также необходимо установить ограничение числа параллельных подключений .NET, которое оно позволяет, чтобы фактически обеспечить более высокий уровень параллелизма. Примерно так:
open System
open System.Net
ServicePointManager.DefaultConnectionLimit <- 20
let checkUrl url =
async {
let req = WebRequest.Create(Uri(url))
req.Proxy <- null
req.Method <- WebRequestMethods.Http.Get
use! resp = req.AsyncGetResponse()
printfn "Downloaded: %s" url
return resp.ContentLength }
[ for i in 0 .. 100 -> checkUrl (sprintf "http://www.google.com?%d" i) ]
|> Async.Parallel
|> Async.RunSynchronously
Mail.find( :all, :select => 'count(*) count, country', :group => 'country', :conditions => ['validated = ?', 't' ], :order => 'count DESC', :limit => 5)
Это должно дать, Вы записываете, которые имеют атрибут страны и атрибут количества.
Попытка:
Mail.count(:group => 'country', :conditions => ['validated = ?', 't'])
я не уверен, что количество принимает :limit
все же.
РЕДАКТИРОВАНИЕ:
я думаю, что это более читаемо:
Mail.count(:group => :country, :conditions => {:validated => true})