background_log.rb
1# frozen_string_literal: true
2
3class BackgroundLog < IO
4 def initialize(io)
5 @io = io
6 @q = Queue.new
7 thread
8 at_exit do
9 @q << :done
10 thread.join
11 end
12 end
13
14 def thread
15 @thread ||= Thread.new do
16 loop do
17 m = @q.pop
18 break if m == :done
19
20 @io.write m
21 end
22 end
23 end
24
25 def write(s)
26 @q << s
27 end
28end