Sha256: 6f559f31e7d1de3d2e89ebbd5a85d3e54e4d516546a38889400253ffb8daea8a
Contents?: true
Size: 1.99 KB
Versions: 2
Compression:
Stored size: 1.99 KB
Contents
module Steep module Server class WorkerProcess attr_reader :reader attr_reader :writer attr_reader :stderr attr_reader :name attr_reader :wait_thread def initialize(reader:, writer:, stderr:, wait_thread:, name:) @reader = reader @writer = writer @stderr = stderr @wait_thread = wait_thread @name = name end def self.spawn_worker(type, name:, steepfile:, delay_shutdown: false) log_level = %w(debug info warn error fatal unknown)[Steep.logger.level] command = case type when :code ["steep", "worker", "--code", "--name=#{name}", "--log-level=#{log_level}", "--steepfile=#{steepfile}"] when :signature ["steep", "worker", "--signature", "--name=#{name}", "--log-level=#{log_level}", "--steepfile=#{steepfile}"] when :interaction ["steep", "worker", "--interaction", "--name=#{name}", "--log-level=#{log_level}", "--steepfile=#{steepfile}"] else raise end if delay_shutdown command << "--delay-shutdown" end stdin, stdout, thread = Open3.popen2(*command, pgroup: true) stderr = nil writer = LanguageServer::Protocol::Transport::Io::Writer.new(stdin) reader = LanguageServer::Protocol::Transport::Io::Reader.new(stdout) new(reader: reader, writer: writer, stderr: stderr, wait_thread: thread, name: name) end def self.spawn_code_workers(steepfile:, count: [Etc.nprocessors-3, 1].max, delay_shutdown: false) count.times.map do |i| spawn_worker(:code, name: "code@#{i}", steepfile: steepfile, delay_shutdown: delay_shutdown) end end def <<(message) writer.write(message) end def read(&block) reader.read(&block) end def kill Process.kill(:TERM, @wait_thread.pid) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
steep-0.41.0 | lib/steep/server/worker_process.rb |
steep-0.40.0 | lib/steep/server/worker_process.rb |