在bash中传输的Python脚本 - 当生产者很慢时,消费者没有数据?

时间:2016-10-04 20:59:10

标签: python bash python-2.7 pipe stdin

我有两个Python脚本。一个进行数据库查询,解析输出,并逐行写入格式化表单(由命令行参数确定的文件或stdout,由argparse处理/打开)。

第二个,在解析静态文件大约一分钟之后,逐行读取(从文件或stdin,使用argparse等),处理并写入自己的文件输出(文件或stdout,由argparse确定。)

在unpiped($ ./1.py argsfile midfile; ./2.py argsfile midfile outfile)时,两者都能正常工作。

对于来自第一个脚本的较小查询,将两者组合在一起也可以正常工作,实际上要快得多($ ./1.py - | ./2.py - outfile)。

但是,当第一个脚本的数据库查询很大时,单独执行这两个脚本仍然有效,但管道它们没有 - 我最好的猜测是第二个脚本正在完成预处理,检查stdin,看到它因为第一个脚本还没有写入,所以没有任何内容。什么都不解,什么都不返,什么都不写。

The previous question/answer I've found on this似乎表明这不应该是可能的,for line in infile标准输入infile应该阻止直到关闭。我也试过了

while True:
    line = infile.readline()
    if line == '':
        break
    else:
        pass # actual processing

但这也不起作用。我不能完全放弃条件和休息,因为它会永远阻止,这不是为了阅读无穷无尽的流,只是一些管道输入需要一段时间才能开始到达。

由于业务限制,将其保存在单独的脚本中是一项要求(如果时间到了,最大限度地减少了从两个步骤中的任何一个中涉及的系统转移的难度)。

0 个答案:

没有答案