ログ ファイルから同じ数の行を生成する次の 4 行 (すべて同じ) を考えてみましょう。
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>&1 | wc -l
620
ここで、stderr からの行をカウントする代わりに、stderr から読み取られたファイルの行をカウントすることを除いて、まったく同じ行を考えてみましょう。
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
612 test.txt
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
617 test.txt
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
619 test.txt
$ zcat test-catalog.xml.gz | bin/process-catalog.py -b build -T 4 - 2>test.txt ; wc -l test.txt
617 test.txt
stderr をファイルに送信する場合、行数が異なることに注意してください。
-T オプションは、スタックレス Python スクリプトが使用しているスレッドの数を指定します。これを 1 つのスレッドに設定すると、一貫した結果が得られます。したがって、これは、出力の最後のビットが書き込まれる前に何かが終了することに関連しているようです。それでも、スクリプトが実際に毎回そのタスクを完了することを観察しました (完全にログに記録していないにもかかわらず)。
stderr を送信している場所によってログ出力が異なる理由に困惑しています。また、スクリプトがタスクを終了しているにもかかわらず、スレッドの数がこれに影響を与える理由についても困惑しています (したがって、途中で終了することはありません)。
ここで何が起こっているのかを理解するのを手伝ってくれる人がいれば幸いです。ありがとう!