rdispatch 0.0.1a

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/rdispatch/sys.rb +7 -0
  3. data/lib/rdispatch.rb +35 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a123381331847cab84773b4aa4235285b0defd72
4
+ data.tar.gz: 0a2a9eb7d269f92aa124306ab8aca0a7c6a2e845
5
+ SHA512:
6
+ metadata.gz: 269d2c59052fbdf1b72e6bde584942c2f9e589886416942480f7d670d7a5a069d73bbf10f28b49cbdb1e72e8d51c8147e3d6822b2f38aeaabdb78c4629728d9b
7
+ data.tar.gz: 67cdd1052f0384206598e21054ca8fd59f5b87989d3b530710795c37e70527d3e53ebc1f0a559a0c163c94053ccf93c14c9a8d759b93edb083457d3344993905
@@ -0,0 +1,7 @@
1
+ require 'etc'
2
+ class RDispatch::System
3
+ # return number of CPU threads
4
+ def self.thread_count
5
+ Etc.nprocessors
6
+ end
7
+ end
data/lib/rdispatch.rb ADDED
@@ -0,0 +1,35 @@
1
+ class RDispatch
2
+
3
+ def initialize
4
+ tasks = []
5
+ end
6
+
7
+ def create_task(callback, data)
8
+ avail_threads = RDispatch::System.thread_count
9
+ unless data.kind_of?(Array)
10
+ raise ArgumentError, "#{data} is not an array", caller
11
+ end
12
+ split_data = data.each_slice((data.size/avail_threads.to_f).round).to_a
13
+ split_data.each do |data_array|
14
+ # create tasks, each with 1/n of data, where n is number of cpu cores
15
+ tasks << proc { callback.call(data_array) }
16
+ end
17
+ end
18
+
19
+ def run!
20
+ # run tasks, each in its own thread
21
+ threads = []
22
+ tasks.each do |t|
23
+ threads << Thread.new do
24
+ puts "spawning thread"
25
+ t.call
26
+ end
27
+ end
28
+ threads.each(&:join)
29
+ tasks = []
30
+ end
31
+
32
+ private
33
+ tasks = []
34
+ end
35
+ require 'rdispatch/sys'
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rdispatch
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1a
5
+ platform: ruby
6
+ authors:
7
+ - Valeriy Antonov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-09-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: An execution queue dispatcher in Ruby
14
+ email: aulandsdalen@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/rdispatch.rb
20
+ - lib/rdispatch/sys.rb
21
+ homepage: http://rubygems.org/gems/rdispatch
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.2'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">"
37
+ - !ruby/object:Gem::Version
38
+ version: 1.3.1
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.6.12
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: ''
45
+ test_files: []