# Generic ? regarding Threads

**URL:** <https://www.ruby-forum.com/t/generic-regarding-threads/126106>\
**Category:** Ruby\
**Created:** [January 15, 2008, 1:30pm UTC](https://www.ruby-forum.com/t/generic-regarding-threads/126106 "2008-01-15T13:30:57Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [January 15, 2008, 1:30pm UTC](https://www.ruby-forum.com/t/generic-regarding-threads/126106/1 "2008-01-15T13:30:57Z")

</div>

Hi,

I am planning to use Ruby threading to query 2 different databases  
running on 2 different machines. I understand how Ruby threads are in  
process and are NOT native. My requirement is simple. Send the query  
request to different database servers running on completely separate  
machines and then combine the output from both the queries as one.

I am wondering whether anybody has implemented such requirement and  
would like to know your experiences, suggestions etc.

Thanks,

-Venks

---

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [January 15, 2008, 3:42pm UTC](https://www.ruby-forum.com/t/generic-regarding-threads/126106/2 "2008-01-15T15:42:33Z")

</div>

Venks:

My experience on multiple sources is that sometimes  
one source says “N/A” while another says “1.99” for the same item in a  
record.  
So you’ll need to decide which source outranks the other, and  
other heuristics to determine which data overwrites the other.  
For example, “Nil” usually means “I don’t know yet”, so you  
go with the source that claims knowledge.

Also, you may want a local cache to fall back on if  
any of the sources are temporarily down and can’t get the very latest  
data.

Another trick is that sometimes on your updates,  
you’ll get a thread stuck on a query, a request, a particularly tuff  
computation…  
On my dual/core machine I like having 4 threads running,  
it’s like a 4 lane highway that will keep flow going even is a lane is  
closed.

OK, hope that helps.  
-Carlos

On Tue, 15 Jan 2008 21:30:27 +0900, “Venks” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
said:

---

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [January 15, 2008, 4:35pm UTC](https://www.ruby-forum.com/t/generic-regarding-threads/126106/3 "2008-01-15T16:35:43Z")

</div>

I have much simpler requirements. I don’t use Active Record which I  
believe is not thread safe. I will be using the native MySQL driver  
and also there are no DML, just queries. But the important thing is  
that I need to pass a time out parameter based on which I need to kill  
the all the threads if the entire process exceeds the time out  
parameter.

---

<div class="post-metadata">

**Author:** ![Venks](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/edb3f5/32.png) [@Venks](https://www.ruby-forum.com/u/Venks)\
**Post date:** [January 15, 2008, 5:42pm UTC](https://www.ruby-forum.com/t/generic-regarding-threads/126106/4 "2008-01-15T17:42:12Z")

</div>

I did some very minor experimentation back when the first Database  
library came out for Ruby, so  
probably this is as far as I can go on this.

When you create a thread  
thread1 = Thread.new { your query #1 here }  
thread2 = Thread.new { your query #2 here }  
You can set up a timeout block waiting for thread1 and thread2 to join  
the main thread.  
You can use the Timeout library.  
Looks like it be something like  
begin  
Timeout::timeout( @timeout ) do  
thread1.join; thread2.join  
end  
rescue Timeout:ERROR  
tread1.kill; thread2.kill;  
end  
I’ve not tested the code above, but definitely doable in Ruby.

-Carlos

On Wed, 16 Jan 2008 00:34:21 +0900, “Venks” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
said:
