我正在尝试使用map运行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.stderr打印某些内容时,总是会发生此警告(并且最后作业失败)。
worker protocol的文档说:工人不应向stderr写任何东西,除非消息的格式如下所述。最初还将stdout重定向到stderr。
关于python - Disco的“无法解析工作人员事件:”错误是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6670942/