procemon 0.3.1 → 0.3.2
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.
- data/README.md +4 -0
- data/VERSION +1 -1
- data/examples/simple async processing.rb +40 -0
- data/lib/procemon/function/async/async.rb +58 -0
- data/lib/procemon/function/async/kernel.rb +5 -0
- data/test/prototype/class_field.rb +27 -0
- data/test/test.rb +14 -9
- metadata +7 -2
data/README.md
CHANGED
@@ -29,6 +29,10 @@ tells you how to play with proc and method objects source code,
|
|
29
29
|
combine them, manipulate them, and convert back into live code
|
30
30
|
with the right bindings
|
31
31
|
|
32
|
+
the "simple async processing" will let you use os threads (1.9.n+)
|
33
|
+
for multiprocessing so you can give multiple task to do and
|
34
|
+
until you ask for the value, the process will be in the background
|
35
|
+
|
32
36
|
## LICENSE
|
33
37
|
|
34
38
|
(The MIT License)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Require Gemfile gems
|
2
|
+
require_relative "../lib/procemon"
|
3
|
+
|
4
|
+
calculation = async {
|
5
|
+
|
6
|
+
sleep 10
|
7
|
+
4 * 4
|
8
|
+
}
|
9
|
+
|
10
|
+
puts "hello world"
|
11
|
+
|
12
|
+
calculation += 1
|
13
|
+
|
14
|
+
puts calculation
|
15
|
+
|
16
|
+
#>--------------------------------------------------
|
17
|
+
|
18
|
+
|
19
|
+
test1 = async {
|
20
|
+
|
21
|
+
sleep 8
|
22
|
+
hello= 14
|
23
|
+
sup= "the world is yours"
|
24
|
+
|
25
|
+
sup
|
26
|
+
|
27
|
+
}
|
28
|
+
|
29
|
+
test2 = async {
|
30
|
+
sleep(4)
|
31
|
+
"world"
|
32
|
+
}
|
33
|
+
|
34
|
+
start_time= Time.now
|
35
|
+
|
36
|
+
asd= test1
|
37
|
+
puts asd
|
38
|
+
|
39
|
+
puts test1.value == test2.value
|
40
|
+
puts Time.now-start_time
|
@@ -0,0 +1,58 @@
|
|
1
|
+
Thread.abort_on_exception= true
|
2
|
+
class Async #< BasicObject
|
3
|
+
|
4
|
+
# remove methods!
|
5
|
+
(Async.instance_methods-[
|
6
|
+
:undef_method,
|
7
|
+
:object_id,
|
8
|
+
:__send__,
|
9
|
+
:new
|
10
|
+
]).each do |method|
|
11
|
+
undef_method method
|
12
|
+
end
|
13
|
+
|
14
|
+
@@max_retry ||= 6
|
15
|
+
def initialize(callable)
|
16
|
+
retry_times= nil
|
17
|
+
begin
|
18
|
+
@thread ||= ::Thread.new { callable.call }
|
19
|
+
rescue ThreadError
|
20
|
+
retry_times ||= 0
|
21
|
+
retry_times += 1
|
22
|
+
sleep 5
|
23
|
+
if retry_times <= @@max_retry
|
24
|
+
retry
|
25
|
+
else
|
26
|
+
@thread ||= callable.call
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def value
|
32
|
+
|
33
|
+
#unless @thread.alive?
|
34
|
+
#else
|
35
|
+
# sleep 1
|
36
|
+
#end
|
37
|
+
|
38
|
+
return @thread.value
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
def inspect
|
43
|
+
if @thread.alive?
|
44
|
+
"#<Async running>"
|
45
|
+
else
|
46
|
+
value.inspect
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def method_missing(method, *args)
|
51
|
+
value.__send__(method, *args)
|
52
|
+
end
|
53
|
+
|
54
|
+
def respond_to_missing?(method, include_private = false)
|
55
|
+
value.respond_to?(method, include_private)
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class User
|
2
|
+
class << self
|
3
|
+
attr_reader :fields
|
4
|
+
|
5
|
+
def field (*names)
|
6
|
+
names.flatten.each do |name|
|
7
|
+
attr_accessor name
|
8
|
+
(@fields ||= []) << name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
field :name
|
14
|
+
field :age
|
15
|
+
field :address
|
16
|
+
end
|
17
|
+
|
18
|
+
user = User.new
|
19
|
+
user.age = 22
|
20
|
+
user.address = "1234"
|
21
|
+
user.name = "Me"
|
22
|
+
|
23
|
+
#user.class.fields.each do |field|
|
24
|
+
# puts user.send(field)
|
25
|
+
#end
|
26
|
+
|
27
|
+
puts user.name
|
data/test/test.rb
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
# Require Gemfile gems
|
2
|
-
require 'grape'
|
3
2
|
require_relative "../lib/procemon"
|
4
3
|
|
5
|
-
Grape::API.inject_singleton_method :inherited, add: "after" do |subclass|
|
6
4
|
|
7
|
-
|
5
|
+
test1 = async {
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
sleep 8
|
8
|
+
hello= 14
|
9
|
+
sup= "the world is yours"
|
12
10
|
|
13
|
-
|
11
|
+
sup
|
14
12
|
|
15
|
-
|
13
|
+
}
|
16
14
|
|
17
|
-
|
15
|
+
test2 = async {
|
16
|
+
sleep(4)
|
17
|
+
"world"
|
18
|
+
}
|
19
|
+
|
20
|
+
start_time= Time.now
|
21
|
+
puts test1.value == test2.value
|
22
|
+
puts Time.now-start_time
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: procemon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-01-
|
12
|
+
date: 2014-01-06 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: ! 'This is a collection of my Ruby Procs in the adventure of becoming
|
15
15
|
the best! In short this provides extra tools in Application configs, argumens processing,daemonise,
|
@@ -29,11 +29,14 @@ files:
|
|
29
29
|
- VERSION
|
30
30
|
- examples/fun_with_procs_and_methods.rb
|
31
31
|
- examples/how_to_inject_with_extra_process_a_method.rb
|
32
|
+
- examples/simple async processing.rb
|
32
33
|
- files.rb
|
33
34
|
- lib/procemon.rb
|
34
35
|
- lib/procemon/extra/str2duck.rb
|
35
36
|
- lib/procemon/function/application.rb
|
36
37
|
- lib/procemon/function/argv.rb
|
38
|
+
- lib/procemon/function/async/async.rb
|
39
|
+
- lib/procemon/function/async/kernel.rb
|
37
40
|
- lib/procemon/function/binding/binding.rb
|
38
41
|
- lib/procemon/function/binding/bindless.rb
|
39
42
|
- lib/procemon/function/daemon.rb
|
@@ -74,6 +77,7 @@ files:
|
|
74
77
|
- scripts/test.txt
|
75
78
|
- test/hello/world/file.rb
|
76
79
|
- test/lab.rb
|
80
|
+
- test/prototype/class_field.rb
|
77
81
|
- test/test.rb
|
78
82
|
homepage: https://github.com/adamluzsi/procemon
|
79
83
|
licenses:
|
@@ -103,5 +107,6 @@ summary: Gotta catch em all!
|
|
103
107
|
test_files:
|
104
108
|
- test/hello/world/file.rb
|
105
109
|
- test/lab.rb
|
110
|
+
- test/prototype/class_field.rb
|
106
111
|
- test/test.rb
|
107
112
|
has_rdoc:
|