我正在运行一个线程,它可以做一些事情.

  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通常不会立即将内容写入文件或字符串到控制台.相反,它缓冲输出并以块为单位写入输出.

如果您立即需要输出并且不想等待,则有两种 Select :

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

Ruby相关问答推荐

如何使用 gsub 删除返回字符串中的/和/i?

ActiveRecord::AdapterNotSpecified 数据库配置未指定适配器

减少哈希值

如何使用 Ruby 的邮件 gem 通过 smtp 发送Electron邮件?

如何将两周时间添加到 Time.now?

您如何将 Cucumber 场景标记为待处理

在单个 node 上使用 XPath 返回所有 node 中的元素

如何判断是否安装了gem?

如何让 Ruby 解析时间,就好像它在不同的时区一样?

用零填充数字

如何在 ruby​​ net/http 中实现 cookie 支持?

Ruby 被空格分割

ruby module_function 与包含模块

如何在数组中找到出现次数最多的项目

Ruby 中的 %w{} 和 %W{} 大写和小写百分比 W 数组文字有什么区别?

Ruby 模板:如何将变量传递到内联 ERB?

如何使用密码保护我的 /sidekiq 路由(即需要对 Sidekiq::Web 工具进行身份验证)?

如何使用 Nokogiri 删除 node ?

Ruby 疯狂:类与对象?

=== 与 == 在 Ruby 中