我Celluloid::IO
用来做 DNS 查询,下面是我的代码:
require 'celluloid/io'
class MyResolver
include Celluloid::IO
def initialize
@resolver = DNSResolver.new
end
def resolve(domain)
ips = @resolver.resolve domain
#sleep 1
return {domain: domain, ip: ips}
end
end
pool = MyResolver.pool(size: 5)
domains = [
'www.google.com',
## many other record
]
futures = domains.map {|d| pool.future.resolve(d)}
futures.each do |future|
puts "#{future.value}"
end
此代码工作并在几秒钟内完成。但是当我添加该行时sleep 1
(仅用于学习目的),在打印了一些结果后,进程永远阻塞了,这很奇怪。
谢谢你的帮助。