Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > system() and `` problem in Multithreading

Reply
Thread Tools

system() and `` problem in Multithreading

 
 
Lee Youser
Guest
Posts: n/a
 
      06-05-2008
[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






 
Reply With Quote
 
 
 
 
ara.t.howard
Guest
Posts: n/a
 
      06-05-2008

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://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama




 
Reply With Quote
 
 
 
 
Reacher
Guest
Posts: n/a
 
      06-05-2008
On Jun 5, 2:19*pm, "ara.t.howard" <(E-Mail Removed)> 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://codeforpeople.com/
> --
> 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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
C++ Embedded Phython and multithreading problem santiageit Python 1 05-26-2010 12:41 PM
python and multithreading problem whatazor Python 1 01-26-2008 07:30 AM
Multithreading - Problem with notifyAll() and wait() Vera Java 5 10-13-2006 06:31 PM
problem with multithreading and Web services method invocation abhra.haldar@gmail.com ASP .Net 1 05-11-2006 04:21 PM
HttpModule multithreading and request and response corelation =?Utf-8?B?U2hhcGlybw==?= ASP .Net 7 12-08-2004 01:41 PM



Advertisments