Ruby:程序终止后,数据只能写入/保存/可见文件

oxf4rvwz  于 2023-04-20  发布在  Ruby
关注(0)|答案(1)|浏览(120)

我正在运行一个线程,它做了几件事。
1.它从API获取一个浮点数
1.将该数字追加到文件中
1.将该数字打印到命令终端
1.重复
验证码:

price_file = File.open(price_file, "w+")

   $time = Thread.new { 

        while true
            price = Api.new.api(nil)

            price_file << price
            price_file << " "
           
            puts price

            sleep(seconds)
        end
    }

价格或数字只有在我终止循环或程序后才出现在文件中。
我希望能够运行一些功能的数字被添加到文件中,而程序仍在运行。

n6lpvg4x

n6lpvg4x1#

Ruby通常不会立即将内容写入控制台的文件或字符串,而是缓冲输出并将输出写入块。
当您需要立即输出并且不想等待时,则有两个选项:

  • 在写入后关闭文件,并在有更多数据要写入时再次打开它。在您希望另一个进程同时从该文件读取的用例中,这可能是首选。关闭文件应确保文件处于一致的状态。
  • 或者您可以在打开文件后设置price_file.sync = true。当IO.sync=设置为true时,所有输出都会立即刷新到底层操作系统,而不会在内部进行缓冲。

相关问题