pthread 0.0.4 → 0.0.5
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.
- checksums.yaml +7 -0
- data/README.md +11 -1
- data/lib/pthread/pthread.rb +7 -1
- data/lib/pthread/pthread_executor.rb +7 -1
- data/lib/pthread/version.rb +1 -1
- data/spec/pthread/pthread_spec.rb +20 -4
- metadata +11 -19
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 213bac2cad94dec43de4335dc960856159285579
|
4
|
+
data.tar.gz: 793f6c5ca5e1e5d6eaad64f071996855e7a9ef8a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7c7d7a9047c9c841addadbadf6184e4f4255b9422538c437c35c32a456ad037d0867eaea3c2b8268ace446bab6a8c86610ecc3e887e5721fdbd13330e4e7497c
|
7
|
+
data.tar.gz: da0961a42d8420cd43f4b56cd6a4b995f0e33b3b5f2d389509f0e14f31e24545053bb79293c2ed45c3ebfe478e76896984e5c5b8d247b44cb126e9c6d999f673
|
data/README.md
CHANGED
@@ -42,10 +42,20 @@ specifing the host and a desired queue.
|
|
42
42
|
|
43
43
|
Now you can spawn Pthreads in order to gain multicore performance by providing name of the queue, code to be executed and context variables:
|
44
44
|
|
45
|
-
Pthread::Pthread.new queue: 'tasks', code: %{
|
45
|
+
pthread = Pthread::Pthread.new queue: 'tasks', code: %{
|
46
46
|
x ** 2
|
47
47
|
}, context: { x: 5 }
|
48
48
|
|
49
|
+
When you need to get the value back simple call
|
50
|
+
|
51
|
+
pthread.value # => 25
|
52
|
+
|
53
|
+
### Exceptions
|
54
|
+
If exception is raised inside a pthread in doesn't affect the whole process.
|
55
|
+
Exception is raise by accesing pthread's value.
|
56
|
+
|
57
|
+
pthread.value # => raise exception
|
58
|
+
|
49
59
|
## Contributing
|
50
60
|
|
51
61
|
1. Fork it
|
data/lib/pthread/pthread.rb
CHANGED
@@ -26,6 +26,12 @@ class Pthread::Pthread
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def value
|
29
|
-
|
29
|
+
raw_value.is_a?(StandardError) ? raise(raw_value) : raw_value
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def raw_value
|
35
|
+
@raw_value ||= @@ts.take([self.object_id, nil])[1]
|
30
36
|
end
|
31
37
|
end
|
@@ -13,7 +13,13 @@ class Pthread::PthreadExecutor
|
|
13
13
|
self.send("#{a}=", context[a])
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
value = begin
|
17
|
+
eval(code)
|
18
|
+
rescue => e
|
19
|
+
e
|
20
|
+
end
|
21
|
+
|
22
|
+
ts.write([pthread_id, value])
|
17
23
|
end
|
18
24
|
rescue DRb::DRbConnError
|
19
25
|
exit 0
|
data/lib/pthread/version.rb
CHANGED
@@ -2,10 +2,12 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Pthread::Pthread do
|
4
4
|
|
5
|
+
let(:x) { 5 }
|
6
|
+
|
5
7
|
let(:pthread) do
|
6
8
|
Pthread::Pthread.new queue: 'tasks', code: %{
|
7
|
-
|
8
|
-
}, context: { x:
|
9
|
+
25 / x
|
10
|
+
}, context: { x: x }
|
9
11
|
end
|
10
12
|
|
11
13
|
before do
|
@@ -13,7 +15,21 @@ describe Pthread::Pthread do
|
|
13
15
|
Pthread::Pthread.add_executor 'tasks'
|
14
16
|
end
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
+
context 'without exceptions' do
|
19
|
+
it 'should calculate value in a separate process' do
|
20
|
+
pthread.value.should eq 5
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'with exceptions' do
|
25
|
+
let(:x) { 0 }
|
26
|
+
|
27
|
+
it 'should store exception' do
|
28
|
+
pthread.send(:raw_value).should be_instance_of ZeroDivisionError
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should raise error on value access' do
|
32
|
+
expect { pthread.value }.to raise_error ZeroDivisionError
|
33
|
+
end
|
18
34
|
end
|
19
35
|
end
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pthread
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Nikita Cernovs
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
11
|
+
date: 2013-05-18 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,33 +27,29 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rspec
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rake
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
description: Parallel threads in Ruby using dRb
|
@@ -83,27 +76,26 @@ files:
|
|
83
76
|
homepage: http://nikitachernov.github.io/Pthread
|
84
77
|
licenses:
|
85
78
|
- MIT
|
79
|
+
metadata: {}
|
86
80
|
post_install_message:
|
87
81
|
rdoc_options: []
|
88
82
|
require_paths:
|
89
83
|
- lib
|
90
84
|
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
-
none: false
|
92
85
|
requirements:
|
93
|
-
- -
|
86
|
+
- - '>='
|
94
87
|
- !ruby/object:Gem::Version
|
95
88
|
version: '0'
|
96
89
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
90
|
requirements:
|
99
|
-
- -
|
91
|
+
- - '>='
|
100
92
|
- !ruby/object:Gem::Version
|
101
93
|
version: '0'
|
102
94
|
requirements: []
|
103
95
|
rubyforge_project:
|
104
|
-
rubygems_version:
|
96
|
+
rubygems_version: 2.0.3
|
105
97
|
signing_key:
|
106
|
-
specification_version:
|
98
|
+
specification_version: 4
|
107
99
|
summary: Parallel threads in Ruby
|
108
100
|
test_files:
|
109
101
|
- spec/pthread/pthread_spec.rb
|