pthread 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -26,6 +26,12 @@ class Pthread::Pthread
26
26
  end
27
27
 
28
28
  def value
29
- @@ts.take([self.object_id, nil])[1]
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
- ts.write([pthread_id, eval(code)])
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
@@ -1,3 +1,3 @@
1
1
  module Pthread
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -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
- x ** 2
8
- }, context: { x: 5 }
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
- it 'should calculate value in a separate process' do
17
- pthread.value.should eq 25
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.4
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-04 00:00:00.000000000 Z
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: 1.8.25
96
+ rubygems_version: 2.0.3
105
97
  signing_key:
106
- specification_version: 3
98
+ specification_version: 4
107
99
  summary: Parallel threads in Ruby
108
100
  test_files:
109
101
  - spec/pthread/pthread_spec.rb