asynchronous 3.0.0.pre.pre → 3.0.1
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 +8 -8
- data/README.md +14 -0
- data/VERSION +1 -1
- data/examples/ruby_worker.rb +54 -0
- data/lib/asynchronous/parallelism.rb +3 -3
- data/lib/asynchronous/shared_memory.rb +2 -5
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MWRlMTE2ZjM5MmYyYjRiN2I3NGIyYjJhMTdmNGY1NzcxNjMxMGJjMg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGNlZWE3MjliNGRhMzY3NGEzZTZkMGE4M2Q3NTExZGU0NGY0OWNhMQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MTY3MmUyNTI2ODkxODMzZGEwNDdkMDI2YzY1Y2Y0MDZlOWUyOTM0NDI0MDEx
|
10
|
+
YjMzN2U3NTBhNjMzNGM4Y2I1ODI1MDBhNTgyMTg2NzQ1YWM5YzM3MDhlNWIw
|
11
|
+
ZDBiOTlkMjI2MTM4OTcwYTg0YjA3YWNlOTlmZGRhN2E3MWI2NzI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDRlMmNhODk3NDQ0YjkwNWY4MzJiNDNiMDQwZTg3YjNkNDE5Yzg3ZTQwYTRk
|
14
|
+
OWNiZWRjZjg1NGMwODhmODE3OGU2NDNhYjQ5M2UwMTI4MzA2NWM4ZDc5OWRj
|
15
|
+
ZTdhNmUxZTRmMDI5NmZjNmFjYWRiOTIwMGZmYjczNDgxYjU1YmM=
|
data/README.md
CHANGED
@@ -160,3 +160,17 @@ Kernel holding on Native threads with pipes can choke up
|
|
160
160
|
* direct sleep commands can do this on multiple native threads
|
161
161
|
** hard processing load not like that, only kernel sleep
|
162
162
|
|
163
|
+
SharedMemory objects not updating on chain method obj manipulation
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
shared_memory.var= {'jobs'=>[]}
|
167
|
+
|
168
|
+
{'jobs'=>[]}['jobs'].push 'data' #> {'jobs'=>[]}
|
169
|
+
|
170
|
+
workaround is like that:
|
171
|
+
|
172
|
+
local_variable= {'jobs'=>[]}
|
173
|
+
local_variable['jobs'].push('data')
|
174
|
+
|
175
|
+
shared_memory.var= local_variable
|
176
|
+
```
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.1
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative "../lib/asynchronous"
|
2
|
+
|
3
|
+
shared_memory.ruby_worker_jobs= Array.new
|
4
|
+
shared_memory.static_variables.push :ruby_worker_jobs
|
5
|
+
|
6
|
+
class Worker
|
7
|
+
|
8
|
+
def self.do_some_hard_work! *args
|
9
|
+
|
10
|
+
puts "heavy db load job here with params #{args.inspect}"
|
11
|
+
#some brutal DB work here
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.add_job *array
|
16
|
+
shared_memory.ruby_worker_jobs.push array
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
async :OS do
|
23
|
+
|
24
|
+
loop do
|
25
|
+
|
26
|
+
unless shared_memory.ruby_worker_jobs.empty?
|
27
|
+
|
28
|
+
puts "job to do again..."
|
29
|
+
job= shared_memory.ruby_worker_jobs.pop
|
30
|
+
|
31
|
+
model_name = job.shift
|
32
|
+
method_name = job.shift
|
33
|
+
|
34
|
+
model_name.__send__(method_name,*job)
|
35
|
+
|
36
|
+
puts "everything is done, so... nothing to do here... *sigh*"
|
37
|
+
|
38
|
+
else
|
39
|
+
sleep 0.1
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
loop do
|
50
|
+
|
51
|
+
sleep 6
|
52
|
+
Worker.add_job Worker,:do_some_hard_work!,{random: Random.srand}
|
53
|
+
|
54
|
+
end
|
@@ -9,6 +9,9 @@ module Asynchronous
|
|
9
9
|
# when you need to update objects in the memory use :concurrency
|
10
10
|
class Parallelism < Asynchronous::CleanClass
|
11
11
|
|
12
|
+
@@pids ||= []
|
13
|
+
@@motherpid ||= $$
|
14
|
+
|
12
15
|
def asynchronous_fork callable
|
13
16
|
return ::Kernel.fork do
|
14
17
|
|
@@ -53,9 +56,6 @@ module Asynchronous
|
|
53
56
|
|
54
57
|
def initialize callable
|
55
58
|
|
56
|
-
@@pids ||= []
|
57
|
-
@@motherpid ||= $$
|
58
|
-
|
59
59
|
@comm_line = ::IO.pipe
|
60
60
|
@value = nil
|
61
61
|
@read_buffer = nil
|
@@ -40,16 +40,12 @@ module Asynchronous
|
|
40
40
|
def asynchronous_set_value obj
|
41
41
|
return @data.write_object obj
|
42
42
|
end
|
43
|
-
|
44
|
-
def asynchronous_set_value= obj
|
45
|
-
self.asynchronous_set_value(obj)
|
46
|
-
end
|
43
|
+
alias :asynchronous_set_value= :asynchronous_set_value
|
47
44
|
|
48
45
|
def asynchronous_get_value
|
49
46
|
return @data.read_object
|
50
47
|
end
|
51
48
|
|
52
|
-
|
53
49
|
def method_missing(method, *args, &block)
|
54
50
|
|
55
51
|
#::Kernel.puts "method: #{method}, #{args}, #{block}"
|
@@ -76,6 +72,7 @@ module Asynchronous
|
|
76
72
|
end
|
77
73
|
|
78
74
|
return_value= new_value.__send__(method,*args,&block)
|
75
|
+
|
79
76
|
unless new_value == original_value
|
80
77
|
asynchronous_set_value new_value
|
81
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: asynchronous
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Luzsi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-02-
|
11
|
+
date: 2014-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: process_shared
|
@@ -57,6 +57,7 @@ files:
|
|
57
57
|
- examples/array_of_value_with_native_threads.rb
|
58
58
|
- examples/async_patterns.rb
|
59
59
|
- examples/no_zombie_test.rb
|
60
|
+
- examples/ruby_worker.rb
|
60
61
|
- examples/shared_memory1.rb
|
61
62
|
- examples/shared_memory2.rb
|
62
63
|
- files.rb
|
@@ -80,9 +81,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
81
|
version: '0'
|
81
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
83
|
requirements:
|
83
|
-
- - ! '
|
84
|
+
- - ! '>='
|
84
85
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
86
|
+
version: '0'
|
86
87
|
requirements: []
|
87
88
|
rubyforge_project:
|
88
89
|
rubygems_version: 2.2.1
|