marshal
我正在尝试使用 map 和 reduce 函数运行 Disco 作业,这些函数在使用库通过 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 函数中的输入字符串上调用任何字符串函数都会产生同样的错误。