[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

system() and `` problem in Multithreading

Lee Youser

6/5/2008 4:24:00 PM

[Note: parts of this message were removed to make it a legal post.]

Hi:

I want to execute external routines in my ruby program in a
multithreading way and capture the error information occured in external
routines into a log file. But when i executed external routines in this way:
error_msg = /*`...execute cmd...`*/
All threads in my program didn't seem to run in synchronous way, when i
used /*system("*//*...execute cmd...*//*"),*/ all threads did run
synchronously but i can't get the error information except using this
method: /*system("*//*...execute cmd...*//* > log_file") */and then get
the information from the log_file.


i made a curt routines to recur this problem:

---------------------------
test.rb:

threads = []
5.times do |num|
threads << Thread.new do
system("ruby a.rb thread#{num+1}")
#`ruby a.rb thread#{num+1}`
system("ruby b.rb thread#{num+1}")
#`ruby b.rb thread#{num+1}`
system("ruby c.rb thread#{num+1}")
#`ruby c.rb thread#{num+1}`
system("ruby d.rb thread#{num+1}")
#`ruby d.rb thread#{num+1}`
end
sleep(1)
end
threads.each {|t| t.join}
----------------------------

----------------------------
a.rb:

sleep(5)
time_now = Time.now.strftime("%H:%M:%S")
raise "#{time_now} AAAAA Exception #{ARGV}"

-----------------------------
-----------------------------
b.rb:

sleep(5)
time_now = Time.now.strftime("%H:%M:%S")
raise "#{time_now} BBBBB Exception #{ARGV}"

-----------------------------
-----------------------------
c.rb:

sleep(5)
time_now = Time.now.strftime("%H:%M:%S")
raise "#{time_now} CCCCC Exception #{ARGV}"

-----------------------------
-----------------------------
d.rb:

sleep(5)
time_now = Time.now.strftime("%H:%M:%S")
raise "#{time_now} DDDDD Exception #{ARGV}"

-----------------------------


when use */system /*the output as follow:

D:\Mywork\Ruby\project>ruby test.rb
a.rb:3: 00:12:58 AAAAA Exception thread1 (RuntimeError)
a.rb:3: 00:12:59 AAAAA Exception thread2 (RuntimeError)
a.rb:3: 00:13:00 AAAAA Exception thread3 (RuntimeError)
a.rb:3: 00:13:01 AAAAA Exception thread4 (RuntimeError)
a.rb:3: 00:13:02 AAAAA Exception thread5 (RuntimeError)
b.rb:3: 00:13:03 BBBBB Exception thread1 (RuntimeError)
b.rb:3: 00:13:04 BBBBB Exception thread2 (RuntimeError)
b.rb:3: 00:13:05 BBBBB Exception thread3 (RuntimeError)
b.rb:3: 00:13:06 BBBBB Exception thread4 (RuntimeError)
b.rb:3: 00:13:07 BBBBB Exception thread5 (RuntimeError)
c.rb:3: 00:13:08 CCCCC Exception thread1 (RuntimeError)
c.rb:3: 00:13:09 CCCCC Exception thread2 (RuntimeError)
c.rb:3: 00:13:10 CCCCC Exception thread3 (RuntimeError)
c.rb:3: 00:13:11 CCCCC Exception thread4 (RuntimeError)
c.rb:3: 00:13:12 CCCCC Exception thread5 (RuntimeError)
d.rb:3: 00:13:13 DDDDD Exception thread1 (RuntimeError)
d.rb:3: 00:13:14 DDDDD Exception thread2 (RuntimeError)
d.rb:3: 00:13:15 DDDDD Exception thread3 (RuntimeError)
d.rb:3: 00:13:16 DDDDD Exception thread4 (RuntimeError)
d.rb:3: 00:13:18 DDDDD Exception thread5 (RuntimeError)

but when use */`cmd` /*the output as follow:

D:\Mywork\Ruby\project>ruby test.rb
a.rb:3: 00:16:17 AAAAA Exception thread1 (RuntimeError)
a.rb:3: 00:16:22 AAAAA Exception thread2 (RuntimeError)
b.rb:3: 00:16:22 BBBBB Exception thread1 (RuntimeError)
b.rb:3: 00:16:28 BBBBB Exception thread2 (RuntimeError)
a.rb:3: 00:16:28 AAAAA Exception thread3 (RuntimeError)
c.rb:3: 00:16:28 CCCCC Exception thread1 (RuntimeError)
b.rb:3: 00:16:33 BBBBB Exception thread3 (RuntimeError)
d.rb:3: 00:16:33 DDDDD Exception thread1 (RuntimeError)
c.rb:3: 00:16:33 CCCCC Exception thread2 (RuntimeError)
a.rb:3: 00:16:33 AAAAA Exception thread4 (RuntimeError)
c.rb:3: 00:16:38 CCCCC Exception thread3 (RuntimeError)
d.rb:3: 00:16:38 DDDDD Exception thread2 (RuntimeError)
b.rb:3: 00:16:38 BBBBB Exception thread4 (RuntimeError)
d.rb:3: 00:16:44 DDDDD Exception thread3 (RuntimeError)
a.rb:3: 00:16:44 AAAAA Exception thread5 (RuntimeError)
c.rb:3: 00:16:44 CCCCC Exception thread4 (RuntimeError)
b.rb:3: 00:16:49 BBBBB Exception thread5 (RuntimeError)
d.rb:3: 00:16:49 DDDDD Exception thread4 (RuntimeError)
c.rb:3: 00:16:54 CCCCC Exception thread5 (RuntimeError)
d.rb:3: 00:16:59 DDDDD Exception thread5 (RuntimeError)

The expected output is the first one(use */system/*), but i don't know
why the output is different between the two ways. Could you someone can
tell me why? :-)
Thank you very much!


regards






3 Answers

ara.t.howard

6/5/2008 7:20:00 PM

0


On Jun 5, 2008, at 10:23 AM, Lee Youser wrote:

> The expected output is the first one(use */system/*), but i don't know
> why the output is different between the two ways. Could you someone
> can
> tell me why? :-)
> Thank you very much!

the order threads run is *always* undefined unless you coordinate
them. it's just luck they are run in order for you - make your system
very busy and you will see this.

regards.

a @ http://codeforp...
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama




Reacher

6/5/2008 7:59:00 PM

0

On Jun 5, 2:19 pm, "ara.t.howard" <ara.t.how...@gmail.com> wrote:
> On Jun 5, 2008, at 10:23 AM, Lee Youser wrote:
>
> > The expected output is the first one(use */system/*), but i don't know
> > why the output is different between the two ways. Could you someone  
> > can
> > tell me why? :-)
> > Thank you very much!
>
> the order threads run is *always* undefined unless you coordinate  
> them.  it's just luck they are run in order for you - make your system  
> very busy and you will see this.
>
> regards.
>
> a @http://codeforp...
> --
> we can deny everything, except that we have the possibility of being  
> better. simply reflect on that.
> h.h. the 14th dalai lama

As our Opearting Systems professor drove this into our brains daily,
so shall I repeat it here: You can make no assumptions about the
relative rate of concurrent processes.

Bill Goodman

8/12/2008 5:06:00 PM

0

fvicarel3@aol.com wrote:

>> Who, among the vast array of characters that live in Springsteen's
>> songs, do you feel you relate to the most or are most like?
>
> Bill Horton
>
> In one hand he held his love, in one hand he held his fear, but in
> which he held his faith was never quite clear.
>
> and
>
> down to the highway he strode, but when he got there he didn't find
> nothing bur road
>
> so back he goes into his house to his sleeping wife, and rejoices as
> the rooms fills with glorious morning light
>
> What more can you need?

That's not my take on the song at all. I think the song's ending is
very chilling and leaves matters totally unresolved. Bill Horton's
demons still have the one-up on him at the end. It's one thing to feel
like Steve Earle did about the road in his song "Steve's Last Ramble,"
like he's given it up for better things and is all the better/happier
for it, it's quite another to go back home with a "coldness rising up in
side you that you can't name."

Bill (not Horton)