[Chicago-talk] Using Storable to exchange data between 2 processes

Jay Strauss me at heyjay.com
Thu Jan 22 22:10:04 CST 2004


Steve & Greg,

I want to avoid an RDBMS.  Maybe using a DBM but what's wrong with the code
below?  Seems nice and simple, but maybe I'm missing something.  Although
I'd like to avoid a file all together.

The writer process writes maybe 200,000 times a day (guessing), but the
writes are sporadic, a couple a second then none for 5 seconds.  The reader
is an on demand service, maybe a thousandish a day

Jay

#!/usr/bin/perl
use strict;
use Storable qw(store retrieve freeze thaw);

my %data = IBM=>{last=>0};
my $s;

if (my $pid = fork) {
        parent();
}
else {
        child();
}

sub parent {

        while (1) {
                sleep 2;
                my $data = retrieve('/tmp/jstrauss');
                print $data->{IBM}{last},"\n";
        }

}

sub child {

        foreach (0..60) {
                sleep 1;
                $data{IBM}{last} = $_;
                store(\%data,'/tmp/jstrauss');

        }
}

----- Original Message -----
From: "Steven Lembark" <lembark at wrkhors.com>
To: "Chicago.pm chatter" <chicago-talk at mail.pm.org>
Sent: Thursday, January 22, 2004 10:48 AM
Subject: Re: [Chicago-talk] Using Storable to exchange data between 2
processes


>
> > From your description, perhaps a DBM file accessed by the two
> > processes would work well?  The "writer" can write records to the db
> > as they're read, and the "reader" can just open the db read-only.
> > I don't know if windows would give you "sharing violations" (bah).
>
> No good way to share a DBM file between proc's on hetro O/S
> boxes that I know of. Probably simpler to use message passing
> to move data structures used to init the objects. If you need
> persistence then have a master node store the permenant copies
> via tie.
>
> DBI might work for this. Combined with a bit of MySQL it'd
> give you a way to exchange the data over a network at the
> expense of having to glob-ify it in MySQL. You could tie a
> hash in each of the proc's to MySQL (i.e., relational instead
> of ISAM) and use DBI for your message passing via query on
> a set of passed-around keys.
>
> The catch is finding a reliable way to pass the keys around,
> which requires messages, which leaves messages as the most
> reasonable way to pass simple data structures around in the
> first place.
>
> --
> Steven Lembark                               2930 W. Palmer
> Workhorse Computing                       Chicago, IL 60647
>                                             +1 888 359 3508
> _______________________________________________
> Chicago-talk mailing list
> Chicago-talk at mail.pm.org
> http://mail.pm.org/mailman/listinfo/chicago-talk
>
>




More information about the Chicago-talk mailing list