1

ライブラリを使用して TCP ソケットを介して渡された後に逆シリアル化される map および reduce 関数を使用して、Disco ジョブを実行しようとしてい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 を実行した後、「ワーカー イベントを解析できませんでした:」というフレーズのインスタンスが 1 つ見つかりました。具体的にはファイル内にありますmaster/src/disco_worker.erl。私は Erlang に詳しくないので、これがどのように機能するのかわかりません。

この問題の原因は何ですか? それを回避するために何か他のことをする必要がありますか?

編集:さらにデバッグした後、このエラーはテストケース関数内での string.split() メソッドの使用に関連していることに気付きました。これを使用すると (入力の一部ではない文字列であっても)、このエラーが発生します。メソッドがオブジェクトに存在することを確認しましたが、呼び出すと問題が発生するようです。何かご意見は?

EDIT 2: さらに、 re.split 関数を使用すると、同じ効果が得られます。

EDIT 3:マップ関数の入力文字列で文字列関数を呼び出すと、この同じエラーが発生するようです。

4

1 に答える 1

2

私の場合、この警告は、マップ関数で sys.stderr に何かを出力したときに常に発生しました (そしてジョブは最終的に失敗しました)。ワーカー プロトコルのドキュメントには次のように記載されています。stdout も、最初は stderr にリダイレクトされます。

于 2012-05-15T23:32:11.360 に答える