Ruby:数据到文件的数据仅在程序终止后写入/保存/可见

Ruby: Data to a file only being written / saved / visible after program terminates

提问人:seamus 提问时间:3/18/2023 最后编辑:marc_sseamus 更新时间:4/12/2023 访问量:43

问:

我正在运行一个做一些事情的线程。

  1. 它从 API 获取浮点数
  2. 将该数字追加到文件中
  3. 将该数字打印到命令终端
  4. 重复

法典:

   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
    }

价格或数字仅在我终止循环或程序后才会出现在文件中。

我希望能够在程序仍在运行时对添加到文件中的数字运行一些函数。

Ruby 多线程 文件 io

评论


答:

4赞 spickermann 3/18/2023 #1

Ruby 通常不会立即将内容写入控制台的文件或字符串中。相反,它缓冲输出并将输出写入块中。

当您立即需要输出并且不想等待时,有两个选项:

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