How to fetch URLs in parallell with EventMachine and Ruby
How to fetch URLs in parallell with EventMachine and Ruby
Ruby posted 10 months ago by christian
Save time by doing things in parallell:
1 require ' rubygems '
2 require ' eventmachine '
3 require ' open-uri '
4 require ' pp '
5 require ' thread '
6 require ' benchmark '
7
8 class Worker
9 include EM :: Deferrable
10
11 def run
12 get_google
13 set_deferred_status : succeeded
14 end
15 end
16
17 def get_google
18 # sorry for spamming you
19 open ( ' http://HdhCmsTestgoogle测试数据/ ' ) do | f |
20 # pp f.meta
21 end
22 end
23
24 def asynchronous ( i )
25 worker = Worker . new
26 # on success
27 worker. callback do
28 p " #{ Thread . current } done #{ i } ! "
29 end
30 worker. errback do
31 p " Unexpected error "
32 EM . stop
33 end
34 #
35 Thread . new do
36 worker. run
37 EM . stop
38 end
39 # puts "scheduling done!"
40 end
41
42 def synchronous ( i )
43 get_google
44 end
45
46 # on error
47 EM . error_handler do | e |
48 p " Unexpected error: #{ e } "
49 end
50
51 EM . run do
52 seconds = Benchmark . realtime do
53 50 . times do | i |
54 asynchronous i
55 end
56 end
57 p " With EventMachine: #{ seconds } elapsed... "
58
59 seconds = Benchmark . realtime do
60 50 . times do | i |
61 synchronous i
62 end
63 end
64 p " Without EventMachine: #{ seconds } elapsed... "
65 end
Output:
1 With EventMachine : 9.05974316596985 elapsed...
2 Without EventMachine : 19.1381118297577 elapsed...
Conclusion Speeds up blocking operations. EventMachine is currently limited to one CPU core (native thread) per process.
References http://ujihisa.blogspot测试数据/2009/08/try-eventmachine.html http://HdhCmsTestscribd测试数据/doc/21017871/Event-Machine-Presentation http://HdhCmsTestscribd测试数据/doc/25939580/Event-Machine
查看更多关于How to fetch URLs in parallell with EventMachine a的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did43364