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