Class: HQ::Tools::ThreadPool

Inherits:
Object
  • Object
show all
Defined in:
lib/hq/tools/thread-pool.rb

Instance Method Summary collapse

Constructor Details

#initializeThreadPool

Returns a new instance of ThreadPool.



6
7
8
9
# File 'lib/hq/tools/thread-pool.rb', line 6

def initialize
	require "thread"
	@tasks = Queue.new
end

Instance Method Details

#deinit_hook(&block) ⇒ Object



42
43
44
# File 'lib/hq/tools/thread-pool.rb', line 42

def deinit_hook &block
	@deinit_hook = block
end

#init_hook(&block) ⇒ Object



38
39
40
# File 'lib/hq/tools/thread-pool.rb', line 38

def init_hook &block
	@init_hook = block
end

#schedule(*args, &block) ⇒ Object



34
35
36
# File 'lib/hq/tools/thread-pool.rb', line 34

def schedule *args, &block
	@tasks << [ block, args ]
end

#start(threads) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/hq/tools/thread-pool.rb', line 46

def start threads

	@threads =
		Array.new threads do

			Thread.new do
				worker_init
				worker_run
				worker_deinit
			end

		end

end

#stopObject



61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/hq/tools/thread-pool.rb', line 61

def stop

	@threads.size.times do
		schedule { throw :exit }
	end

	@threads.each do
		|thread|
		thread.join
	end

end

#worker_deinitObject



29
30
31
32
# File 'lib/hq/tools/thread-pool.rb', line 29

def worker_deinit
	return unless @deinit_hook
	@deinit_hook.call
end

#worker_initObject



11
12
13
14
# File 'lib/hq/tools/thread-pool.rb', line 11

def worker_init
	return unless @init_hook
	@init_hook.call
end

#worker_runObject



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/hq/tools/thread-pool.rb', line 16

def worker_run

	catch :exit do

		loop do
			task, args = @tasks.pop
			task.call *args
		end

	end

end