我正在使用celluloid zmq,并且我在应用程序中连接到多个套接字。应用程序在后台保持循环侦听,但当我关闭特定套接字时,它给我这个错误"Celluloid::TaskTerminated: task I“
我将在异常时结束循环,
def puller_loop
logger.info "polling PULL socket"
loop {
begin
async.evaluate_response(pullsock.read_multipart,'PULL')
rescue Exception => e
break
end
}
end发布于 2016-04-22 14:34:19
侦听器方法在套接字关闭时崩溃。您必须捕获并优雅地结束处理程序循环。
始终将套接字read和write操作封装在rescue块中,然后在出现异常(如您提到的异常)或其他套接字错误时退出break。
由于您的loop会在数据到达时触发async调用,因此rescue必须在async调用的方法中...以及loop本身。请确保在可能的情况下不要捕获Exception。我隐约确定你的错误不是Exception的子类
https://stackoverflow.com/questions/36786349
复制相似问题