当stderr指向多线程无堆栈python脚本上的文件时缺少输出



考虑以下四行(都是相同的),它们从日志文件中产生相同数量的行:

$ 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脚本使用的线程数,当我将其设置为一个线程时,我得到一致的结果。因此,这似乎与在写入最后一位输出之前完成的事情有关。尽管如此,我观察到这个脚本实际上每次都完成了它的任务(尽管没有完全记录它)。

我很困惑为什么日志输出会根据我发送stderr的位置而不同。我也感到困惑的是,为什么线程的数量也会影响到这一点,尽管脚本完成了它的任务(所以它没有过早结束)。

如果有人能帮我弄清楚这里发生了什么,我会很感激的。谢谢!

切换到日志文件,现在可以工作了。问题解决了。还是有点好奇为什么

最新更新