Thread question

Every second, a function in the class that's being made available via
DRb should be called automatically. How would I do that?

So I'd have

class Server
def update
   # stuff gets updated
end
end

server = DRb.start_service....

server.update() # <== somehow ran every second

DRb.thread.join

Every second, a function in the class that's being made available via
DRb should be called automatically. How would I do that?

So I'd have

class Server
def update
   # stuff gets updated
end
end

server = DRb.start_service....

server.update() # <== somehow ran every second

How about:

update_thread = Thread.new(server) do | s |
  loop do
    sleep 1
    s.update
  end
end

DRb.thread.join

or is there anything special with drb that prohibits this?

best regards,

Brian

···

On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:

--
http://ruby.brian-schroeder.de/

multilingual _non rails_ ruby based vocabulary trainer:
http://www.vocabulaire.org/ | http://www.gloser.org/ | http://www.vokabeln.net/

I wasn't sure about how the interactions between the threads would
work. I'll try the above and see how it works.

···

On 4/25/05, Brian Schröder <ruby.brian@gmail.com> wrote:

On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> Every second, a function in the class that's being made available via
> DRb should be called automatically. How would I do that?
>
> So I'd have
>
> class Server
> def update
> # stuff gets updated
> end
> end
>
> server = DRb.start_service....
>
> server.update() # <== somehow ran every second

How about:

update_thread = Thread.new(server) do | s |
  loop do
    sleep 1
    s.update
  end
end

>
> DRb.thread.join
>
>

or is there anything special with drb that prohibits this?

One difference from your whish is, that this calls the function with a
sleeptime of approximately one second, or sometimes more, and not
every second. Calling it every second is more difficult.

Also, if I remember correctly, ruby threads may be blocked for some
time by some large io activities.

hope to help,

Brian

···

On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:

On 4/25/05, Brian Schröder <ruby.brian@gmail.com> wrote:
> On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> > Every second, a function in the class that's being made available via
> > DRb should be called automatically. How would I do that?
> >
> > So I'd have
> >
> > class Server
> > def update
> > # stuff gets updated
> > end
> > end
> >
> > server = DRb.start_service....
> >
> > server.update() # <== somehow ran every second
>
> How about:
>
> update_thread = Thread.new(server) do | s |
> loop do
> sleep 1
> s.update
> end
> end
>
> >
> > DRb.thread.join
> >
> >
>
> or is there anything special with drb that prohibits this?
>

I wasn't sure about how the interactions between the threads would
work. I'll try the above and see how it works.

--
http://ruby.brian-schroeder.de/

multilingual _non rails_ ruby based vocabulary trainer:
http://www.vocabulaire.org/ | http://www.gloser.org/ | http://www.vokabeln.net/

"Brian Schröder" <ruby.brian@gmail.com> schrieb im Newsbeitrag news:7993c66305042510075b914ce7@mail.gmail.com...

···

On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:

On 4/25/05, Brian Schröder <ruby.brian@gmail.com> wrote:
> On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> > Every second, a function in the class that's being made available via
> > DRb should be called automatically. How would I do that?
> >
> > So I'd have
> >
> > class Server
> > def update
> > # stuff gets updated
> > end
> > end
> >
> > server = DRb.start_service....
> >
> > server.update() # <== somehow ran every second
>
> How about:
>
> update_thread = Thread.new(server) do | s |
> loop do
> sleep 1
> s.update
> end
> end
>
> >
> > DRb.thread.join
> >
>
> or is there anything special with drb that prohibits this?
>

I wasn't sure about how the interactions between the threads would
work. I'll try the above and see how it works.

One difference from your whish is, that this calls the function with a
sleeptime of approximately one second, or sometimes more, and not
every second. Calling it every second is more difficult.

Also, if I remember correctly, ruby threads may be blocked for some
time by some large io activities.

hope to help,

Another issue worth mentioning is proper synchronization. But since we don't know anything about the nature of the classes and tasks we could only speculate. Just in case the OP needs it: have a look at Mutex and Monitor.

Kind regards

    robert

"Brian Schröder" <ruby.brian@gmail.com> schrieb im Newsbeitrag
news:7993c66305042510075b914ce7@mail.gmail.com...
>> > > Every second, a function in the class that's being made available via
>> > > DRb should be called automatically. How would I do that?
>> > >
>> > > So I'd have
>> > >
>> > > class Server
>> > > def update
>> > > # stuff gets updated
>> > > end
>> > > end
>> > >
>> > > server = DRb.start_service....
>> > >
>> > > server.update() # <== somehow ran every second
>> >
>> > How about:
>> >
>> > update_thread = Thread.new(server) do | s |
>> > loop do
>> > sleep 1
>> > s.update
>> > end
>> > end
>> >
>> > >
>> > > DRb.thread.join
>> > >
>> > >
>> >
>> > or is there anything special with drb that prohibits this?
>> >
>>
>> I wasn't sure about how the interactions between the threads would
>> work. I'll try the above and see how it works.
>>
>>
>
> One difference from your whish is, that this calls the function with a
> sleeptime of approximately one second, or sometimes more, and not
> every second. Calling it every second is more difficult.

That's not an issue. It seems to work great. Thanks!

>
> Also, if I remember correctly, ruby threads may be blocked for some
> time by some large io activities.
>
> hope to help,

Another issue worth mentioning is proper synchronization. But since we
don't know anything about the nature of the classes and tasks we could only
speculate. Just in case the OP needs it: have a look at Mutex and Monitor.

Syncing's also not an issue. But I'll keep that in mind. Thanks.

···

On 4/25/05, Robert Klemme <bob.news@gmx.net> wrote:

> On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
>> On 4/25/05, Brian Schröder <ruby.brian@gmail.com> wrote:
>> > On 25/04/05, Joe Van Dyk <joevandyk@gmail.com> wrote: