0

我正在使用 celluloid-zmq,并且正在连接到应用程序中的多个套接字。应用程序继续在后台循环监听,但是当我关闭特定套接字时,它给了我这个错误“Celluloid::TaskTerminated: 任务已终止”

我正在结束异常循环,

def puller_loop
    logger.info "polling PULL socket"
    loop {
            begin
                async.evaluate_response(pullsock.read_multipart,'PULL')
            rescue Exception => e
                break
            end
    }
end
4

1 回答 1

1

侦听器方法在套接字关闭时崩溃。您必须捕获并优雅地结束处理程序循环。

始终将套接字readwrite操作包含在rescue块中,然后break出现loopon 异常,例如您提到的异常或其他套接字错误。


并且由于您loop触发了async对数据到达的调用,因此rescue必须在async... 调用的方法中以及loop其本身中。确保尽可能不要抓到Exception。我模糊地确定您的错误不是Exception

于 2016-04-22T06:34:18.800 回答