2016-04-22 2 views
0

Я использую celluloid-zmq, и я подключаюсь к нескольким сокетам в приложении. Приложение продолжает слушать в цикле в фоновом режиме, но когда я закрываю конкретный сокет дает мне эту ошибку «целлулоид :: TaskTerminated: задача была прекращена»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 
+0

У вас есть код? Эта ошибка является нормальной при отключении, но вы обычно ожидаете этого. Как закрыть розетку? – digitalextremist

+0

I близко гнездо используя закрытый способ. После закрытия pull socket я хочу, чтобы приложение продолжало слушать другие сокеты (в этом случае DEALER). –

+0

Он никогда не достигнет 'спасения' из-за' async' – digitalextremist

ответ

1

Метод слушателя сбой при закрытии разъема. Вы должны поймать & изящно концы обработчика конца.

Всегда заключите сокету read и write операции в rescue блоках, а затем break из loop на исключения, такие, как тот, который вы упомянули, или другие ошибки сокетов.


И поскольку ваш loop вызывает async вызов данных, поступающих, то rescue должен быть в методе наречено async ... и в loop сам. Удостоверьтесь, что не, чтобы поймать Exception, где это возможно. Я смутно уверен, что ваша ошибка не является подклассом Exception

+0

Обновленный вопрос с кодом. –

+0

Я пробовал без исключения (rescue => e). Это дает ту же ошибку. –

+0

Можете ли вы опубликовать обратную ссылку, пожалуйста? – digitalextremist

 Смежные вопросы

  • Нет связанных вопросов^_^