gpt4 book ai didi

ruby - 为什么在 Celluloid::IO 中调用 sleep 时进程永远阻塞

转载 作者:太空宇宙 更新时间:2023-11-03 16:25:31 25 4
gpt4 key购买 nike

我正在使用 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(仅用于学习目的)时,打印一些结果后,进程永远阻塞,这很奇怪。

感谢您的帮助。

最佳答案

sleepCelluloid 中的重写关键字,因此如果您想要 Ruby 本身的 sleep,请使用 内核 sleep 。但话虽如此,从 Celluoid::IO0.17.0-dependent 分支开始,您描述的这个错误不存在(不再?)。

我使用你的可重现失败案例来测试新的 celluloid-pool gem 在 Celluloid0.17.0 版本中发布,并且它 sleep 1 按原样工作没有问题。

关于ruby - 为什么在 Celluloid::IO 中调用 sleep 时进程永远阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255656/

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