Python 使用';而对';内循环';使用open()';块

Python 使用';而对';内循环';使用open()';块,python,blocking,Python,Blocking,例如: def read_file(f): with open(f, 'r') as file_to_read: while True: line = file_to_read.readline() if line: yield line else: time.sleep(0.1) 发电机被另一个功能消耗: def fun_functi

例如:

def read_file(f):
    with open(f, 'r') as file_to_read:
        while True:
            line = file_to_read.readline()
            if line:
                yield line
            else:
                time.sleep(0.1)
发电机被另一个功能消耗:

def fun_function(f):
    l = read_file(f)
    for line in l:
        do_fun_stuff()
一个用例是读取一个无限更新的文本文件,比如一个日志,其中每隔一秒左右就添加一行


据我所知,
read_file()
函数正在阻止其他函数,只要生成了某些内容。但是,由于除非文件中存在新行,否则不应该执行任何操作,因此在这种情况下,这似乎是可以的。我的问题是,是否有其他原因不喜欢这种阻塞模式(比如性能)

我不明白这个问题。太复杂了。或者基于观点:(“我的问题是,是否有其他原因不喜欢这种阻塞模式(比如性能)”)。为什么要把它弄得这么复杂?你为什么需要它?我看到的主要问题是:在文件的末尾,
read\u file
会永远在一个非繁忙的循环中阻塞,而不可能退出。@sjne我建议你在你的问题中添加它。在读取文件时更新文件并不能在所有系统(例如:windows)上运行,您希望程序何时停止读取?即使它是一个长时间运行的守护进程,您也应该有某种方式发出信号,让它安全地关闭。@kaya3目前只是从命令行终止该进程。我真的没想过。