迪斯科的"Could not parse worker event:"错误是什么意思?



我正在尝试使用map和reduce函数运行Disco作业,这些函数在使用marshal库通过TCP套接字传递后被反序列化。具体来说,我用

来解包它们
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中。我不熟悉Erlang,也不知道它是如何工作的。

是什么导致了这个问题?我应该做些什么来规避它吗?

编辑:经过更多的调试,我意识到这个错误与我在测试用例函数中使用string.split()方法有关。无论何时使用它(即使对于不属于输入的字符串),都会引发此错误。我已经验证了对象上确实存在该方法,但是调用它似乎会导致问题。任何想法吗?编辑2:另外,任何使用re.split函数都可以达到相同的效果。

编辑3:似乎在map函数的输入字符串上调用任何字符串函数都会产生同样的错误。

在我的例子中,这个警告总是在我打印一些东西到sys时出现。map函数中出现错误(最后作业失败)。工人协议的文档说:工人不应该写任何东西到stderr,除了按照下面描述的格式格式化的消息。标准输出最初也被重定向到标准输出。

最新更新