Что означает ошибка Disco «Не удалось разобрать рабочее событие:»? - PullRequest
1 голос
/ 13 июля 2011

Я пытаюсь запустить задание Disco с использованием map и сократить функции, которые десериализовываются после передачи через сокет TCP с использованием библиотеки marshal.В частности, я распаковываю их с

code = marshal.loads(data_from_tcp)
func = types.FunctionType(code, globals(), "func")

. Я уже тестировал простые задания Disco (с локально определенными функциями) в той же системе, и они работают нормально.Однако, когда я запускаю задание Disco с новыми функциями, задания продолжают давать сбой, и я получаю сообщение об ошибке localhost WARNING: [map:0] Could not parse worker event: invalid_length

Я искал документацию, и нет никаких упоминаний о том, что я мог найти«рабочее событие» или invalid_length.После выполнения grep для исходного кода я нахожу единственный экземпляр фразы «Не удалось разобрать рабочее событие:», в частности, в файле master/src/disco_worker.erl.Я не знаком с Эрлангом и понятия не имею, как это работает.

В чем причина этой проблемы?Должен ли я сделать что-то еще, чтобы обойти это?

РЕДАКТИРОВАТЬ: После дополнительной отладки я понял, что эта ошибка связана с моим использованием метода string.split () внутри моей функции тестового случая.Всякий раз, когда он используется (даже для строк, которые не являются частью ввода), эта ошибка возникает.Я проверил, что метод существует на объекте, но вызов его, кажется, вызывает проблемы.Есть мысли?

РЕДАКТИРОВАТЬ 2: Кроме того, любое использование функции re.split достигает того же эффекта.

РЕДАКТИРОВАТЬ 3: Кажется, что вызов любой строковой функции на входной строке вФункция map создает эту же ошибку.

1 Ответ

2 голосов
/ 16 мая 2012

В моем случае это предупреждение возникало всегда, когда я что-то печатал в sys.stderr в функции карты (и в конце задание не было выполнено). Документация к рабочий протокол гласит: Рабочие не должны ничего писать в stderr, кроме сообщений, отформатированных, как описано ниже. stdout также изначально перенаправляется на stderr.

...