GRAYBYTE WORDPRESS FILE MANAGER6107

Server IP : 198.54.121.189 / Your IP : 216.73.216.140
System : Linux premium69.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/alt/ruby20/lib64/ruby/2.0.0/rake/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/alt/ruby20/lib64/ruby/2.0.0/rake//thread_pool.rb
require 'thread'
require 'set'

require 'rake/promise'

module Rake

  class ThreadPool              # :nodoc: all

    # Creates a ThreadPool object.
    # The parameter is the size of the pool.
    def initialize(thread_count)
      @max_active_threads = [thread_count, 0].max
      @threads = Set.new
      @threads_mon = Monitor.new
      @queue = Queue.new
      @join_cond = @threads_mon.new_cond

      @history_start_time = nil
      @history = []
      @history_mon = Monitor.new
      @total_threads_in_play = 0
    end

    # Creates a future executed by the +ThreadPool+.
    #
    # The args are passed to the block when executing (similarly to
    # <tt>Thread#new</tt>) The return value is an object representing
    # a future which has been created and added to the queue in the
    # pool. Sending <tt>#value</tt> to the object will sleep the
    # current thread until the future is finished and will return the
    # result (or raise an exception thrown from the future)
    def future(*args, &block)
      promise = Promise.new(args, &block)
      promise.recorder = lambda { |*stats| stat(*stats) }

      @queue.enq promise
      stat :queued, :item_id => promise.object_id
      start_thread
      promise
    end

    # Waits until the queue of futures is empty and all threads have exited.
    def join
      @threads_mon.synchronize do
        begin
          stat :joining
          @join_cond.wait unless @threads.empty?
          stat :joined
        rescue Exception => e
          stat :joined
          $stderr.puts e
          $stderr.print "Queue contains #{@queue.size} items. Thread pool contains #{@threads.count} threads\n"
          $stderr.print "Current Thread #{Thread.current} status = #{Thread.current.status}\n"
          $stderr.puts e.backtrace.join("\n")
          @threads.each do |t|
            $stderr.print "Thread #{t} status = #{t.status}\n"
            # 1.8 doesn't support Thread#backtrace
            $stderr.puts t.backtrace.join("\n") if t.respond_to? :backtrace
          end
          raise e
        end
      end
    end

    # Enable the gathering of history events.
    def gather_history          #:nodoc:
      @history_start_time = Time.now if @history_start_time.nil?
    end

    # Return a array of history events for the thread pool.
    #
    # History gathering must be enabled to be able to see the events
    # (see #gather_history). Best to call this when the job is
    # complete (i.e. after ThreadPool#join is called).
    def history                 # :nodoc:
      @history_mon.synchronize { @history.dup }.
        sort_by { |i| i[:time] }.
        each { |i| i[:time] -= @history_start_time }
    end

    # Return a hash of always collected statistics for the thread pool.
    def statistics              #  :nodoc:
      {
        :total_threads_in_play => @total_threads_in_play,
        :max_active_threads => @max_active_threads,
      }
    end

    private

    # processes one item on the queue. Returns true if there was an
    # item to process, false if there was no item
    def process_queue_item      #:nodoc:
      return false if @queue.empty?

      # Even though we just asked if the queue was empty, it
      # still could have had an item which by this statement
      # is now gone. For this reason we pass true to Queue#deq
      # because we will sleep indefinitely if it is empty.
      promise = @queue.deq(true)
      stat :dequeued, :item_id => promise.object_id
      promise.work
      return true

      rescue ThreadError # this means the queue is empty
      false
    end

    def start_thread # :nodoc:
      @threads_mon.synchronize do
        next unless @threads.count < @max_active_threads

        t = Thread.new do
          begin
            while @threads.count <= @max_active_threads
              break unless process_queue_item
            end
          ensure
            @threads_mon.synchronize do
              @threads.delete Thread.current
              stat :ended, :thread_count => @threads.count
              @join_cond.broadcast if @threads.empty?
            end
          end
        end
        @threads << t
        stat :spawned, :new_thread => t.object_id, :thread_count => @threads.count
        @total_threads_in_play = @threads.count if @threads.count > @total_threads_in_play
      end
    end

    def stat(event, data=nil) # :nodoc:
      return if @history_start_time.nil?
      info = {
        :event  => event,
        :data   => data,
        :time   => Time.now,
        :thread => Thread.current.object_id,
      }
      @history_mon.synchronize { @history << info }
    end

    # for testing only

    def __queue__ # :nodoc:
      @queue
    end

    def __threads__ # :nodoc:
      @threads.dup
    end
  end

end

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
March 03 2024 22:53:08
root / root
0755
contrib
--
March 03 2024 22:53:08
root / linksafe
0755
ext
--
March 03 2024 22:53:08
root / linksafe
0755
lib
--
March 03 2024 22:53:08
root / linksafe
0755
loaders
--
March 03 2024 22:53:08
root / linksafe
0755
alt_system.rb
3.137 KB
June 23 2011 22:11:55
root / linksafe
0644
application.rb
21.27 KB
November 29 2012 19:16:46
root / linksafe
0644
backtrace.rb
0.607 KB
November 30 2012 03:21:06
root / linksafe
0644
classic_namespace.rb
0.398 KB
June 28 2011 02:45:29
root / linksafe
0644
clean.rb
1.001 KB
November 15 2012 21:59:37
root / linksafe
0644
cloneable.rb
0.471 KB
November 15 2012 21:59:37
root / linksafe
0644
default_loader.rb
0.16 KB
June 23 2011 22:11:55
root / linksafe
0644
dsl_definition.rb
5.019 KB
November 15 2012 21:59:37
root / linksafe
0644
early_time.rb
0.267 KB
June 23 2011 22:11:55
root / linksafe
0644
file_creation_task.rb
0.654 KB
June 23 2011 22:11:55
root / linksafe
0644
file_list.rb
11.496 KB
November 29 2012 19:16:46
root / linksafe
0644
file_task.rb
1.283 KB
June 23 2011 22:11:55
root / linksafe
0644
file_utils.rb
3.006 KB
December 06 2012 07:35:45
root / linksafe
0644
file_utils_ext.rb
4.104 KB
November 15 2012 21:59:37
root / linksafe
0644
gempackagetask.rb
0.276 KB
June 28 2011 02:45:29
root / linksafe
0644
invocation_chain.rb
0.939 KB
June 23 2011 22:11:55
root / linksafe
0644
invocation_exception_mixin.rb
0.421 KB
June 23 2011 22:11:55
root / linksafe
0644
multi_task.rb
0.308 KB
November 15 2012 21:59:37
root / linksafe
0644
name_space.rb
0.604 KB
June 23 2011 22:11:55
root / linksafe
0644
packagetask.rb
5.069 KB
June 23 2011 22:11:55
root / linksafe
0644
pathmap.rb
0.025 KB
June 23 2011 22:11:55
root / linksafe
0644
phony.rb
0.343 KB
November 15 2012 22:32:34
root / linksafe
0644
private_reader.rb
0.355 KB
November 15 2012 22:01:58
root / linksafe
0644
promise.rb
2.326 KB
November 15 2012 22:01:58
root / linksafe
0644
pseudo_status.rb
0.412 KB
June 23 2011 22:11:55
root / linksafe
0644
rake_module.rb
0.71 KB
November 15 2012 22:32:34
root / linksafe
0644
rake_test_loader.rb
0.333 KB
June 28 2011 02:45:29
root / linksafe
0644
rdoctask.rb
6.554 KB
November 15 2012 21:59:37
root / linksafe
0644
ruby182_test_unit_fix.rb
0.823 KB
November 22 2012 05:32:31
root / linksafe
0644
rule_recursion_overflow_error.rb
0.345 KB
June 23 2011 22:11:55
root / linksafe
0644
runtest.rb
0.457 KB
November 15 2012 22:32:34
root / linksafe
0644
task.rb
10.174 KB
November 29 2012 19:16:46
root / linksafe
0644
task_argument_error.rb
0.116 KB
June 23 2011 22:11:55
root / linksafe
0644
task_arguments.rb
1.629 KB
November 15 2012 21:59:37
root / linksafe
0644
task_manager.rb
8.781 KB
November 15 2012 21:59:37
root / linksafe
0644
tasklib.rb
0.566 KB
June 23 2011 22:11:55
root / linksafe
0644
testtask.rb
5.182 KB
November 15 2012 22:32:34
root / linksafe
0644
thread_history_display.rb
1.103 KB
November 15 2012 22:01:58
root / linksafe
0644
thread_pool.rb
4.668 KB
November 15 2012 22:01:58
root / linksafe
0644
trace_output.rb
0.477 KB
November 29 2012 19:16:46
root / linksafe
0644
version.rb
0.183 KB
December 21 2012 02:34:37
root / linksafe
0644
win32.rb
1.525 KB
June 23 2011 22:11:55
root / linksafe
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF