Regarding shared memory

Discussion in 'Python' started by gaurav kashyap, Oct 30, 2008.

  1. Dear all,

    I have a server program that listens to a particular port and a number
    of client programs that connect to the server.

    Now i want to put some data in form of python list in main memory on
    server.Hence whenver a client program is run it connects to the server
    and access the data in main memory.Here the server calls a module that
    processes the data as per the client request and the returns some
    information to the client.

    I can create client and server programs using socket programming,but i
    am not able to put the data in shared memory and then access it.

    NOTE:I want to put the data in main memory only once(on the server
    using server program) i.e. whenever client connects to the server it
    should only access the data and not create a replica of data already
    loaded in memory.How can this be achieved

    thanks.
     
    gaurav kashyap, Oct 30, 2008
    #1
    1. Advertising

  2. gaurav kashyap

    James Mills Guest

    On Thu, Oct 30, 2008 at 2:13 PM, gaurav kashyap <> wrote:
    > Dear all,
    >
    > I have a server program that listens to a particular port and a number
    > of client programs that connect to the server.
    >
    > Now i want to put some data in form of python list in main memory on
    > server.Hence whenver a client program is run it connects to the server
    > and access the data in main memory.Here the server calls a module that
    > processes the data as per the client request and the returns some
    > information to the client.
    >
    > I can create client and server programs using socket programming,but i
    > am not able to put the data in shared memory and then access it.
    >
    > NOTE:I want to put the data in main memory only once(on the server
    > using server program) i.e. whenever client connects to the server it
    > should only access the data and not create a replica of data already
    > loaded in memory.How can this be achieved


    This is trivially done with an event-driven framework
    such as Twisted or Circuits. I'm the author of circuits (1.0
    release coming soon), so here is a circuits based example:

    Server code:
    <code>
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # vim: set sw=3 sts=3 ts=3

    """(Example) Echo Server

    A simple Echo Server example that sends back to connected clients
    the input the server receieves.

    This example demonstrates:
    * Basic Component creation.
    * Basic Event handling.
    * Basic TCP Server

    This example makes use of:
    * Component
    * Event
    * Manager
    * lib.sockets.TCPServer
    """

    from circuits.lib.sockets import TCPServer
    from circuits.core import listener, Event, Component, Manager

    ###
    ### Components
    ###

    class EchoServer(TCPServer):

    def __init__(self, *args, **kwargs):
    super(EchoServer, self).__init__(*args, **kwargs)

    self.data = [1, 2, 3, 4]

    @listener("read")
    def onREAD(self, sock, data):
    self.write(sock, data)
    self.write(sock, "Data: %s" % self.data)

    ###
    ### Main
    ###

    def main():
    manager = Manager()
    server = EchoServer(8000)
    manager += server

    while True:
    try:
    manager.flush()
    server.poll()
    except KeyboardInterrupt:
    break

    ###
    ### Entry Point
    ###

    if __name__ == "__main__":
    main()
    </code>

    Client code: (I'm just using a basic telnet example here)
    <code>
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # vim: set sw=3 sts=3 ts=3

    """(Example) Telnet Client

    A basic telnet-like clone that connects to remote hosts
    via tcp and allows the user to send data to the remote
    server.

    This example demonstrates:
    * Basic Component creation.
    * Basic Event handling.
    * Basiv Networking
    * Basic Request/Response Networking

    This example makes use of:
    * Component
    * Event
    * Manager
    * lib.sockets.TCPClient
    """

    import optparse

    from circuits.lib.io import Stdin
    from circuits.lib.sockets import TCPClient
    from circuits import __version__ as systemVersion
    from circuits.core import listener, Event, Component, Manager

    USAGE = "%prog [options] host [port]"
    VERSION = "%prog v" + systemVersion

    ###
    ### Functions
    ###

    def parse_options():
    """parse_options() -> opts, args

    Parse any command-line options given returning both
    the parsed options and arguments.
    """

    parser = optparse.OptionParser(usage=USAGE, version=VERSION)

    parser.add_option("-s", "--ssl",
    action="store_true", default=False, dest="ssl",
    help="Enable Secure Socket Layer (SSL)")

    opts, args = parser.parse_args()

    if len(args) < 1:
    parser.print_help()
    raise SystemExit, 1

    return opts, args

    ###
    ### Components
    ###

    class Telnet(TCPClient):

    @listener("connect")
    def onCONNECT(self, host, port):
    print "Connected to %s" % host

    @listener("read")
    def onREAD(self, data):
    print data.strip()

    @listener("stdin:read")
    def onINPUT(self, data):
    self.write(data)

    ###
    ### Main
    ###

    def main():
    opts, args = parse_options()

    host = args[0]
    if len(args) > 1:
    port = int(args[1])
    else:
    port = 23

    manager = Manager()

    telnet = Telnet()
    stdin = Stdin()

    manager += stdin
    manager += telnet

    print "Trying %s..." % host
    telnet.open(host, port, ssl=opts.ssl)

    while telnet.connected:
    try:
    manager.flush()
    stdin.poll()
    telnet.poll()
    except KeyboardInterrupt:
    break

    telnet.close()

    ###
    ### Entry Point
    ###

    if __name__ == "__main__":
    main()
    </code>

    Client output:
    <paste>
    $ ./telnet.py localhost 8000
    Trying localhost...
    Connected to localhost
    test
    test
    Data: [1, 2, 3, 4]
    </paste>

    Circuits can be downloaded from:
    http://trac.softcircuit.com.au/circuits/

    cheers
    James

    --
    --
    -- "Problems are solved by method"
     
    James Mills, Oct 30, 2008
    #2
    1. Advertising

  3. gaurav kashyap

    Aaron Brady Guest

    On Oct 29, 11:13 pm, gaurav kashyap <> wrote:
    > Dear all,
    >
    > I have a server program that listens to a particular port and a number
    > of client programs that connect to the server.
    >
    > Now i want to put some data in form of python list in main memory on
    > server.Hence whenver a client program is run it connects to the server
    > and access the data in main memory.Here the server calls a module that
    > processes the data as per the client request and the returns some
    > information to the client.
    >
    > I can create client and server programs using socket programming,but i
    > am not able to put the data in shared memory and then access it.
    >
    > NOTE:I want to put the data in main memory only once(on the server
    > using server program) i.e. whenever client connects to the server it
    > should only access the data and not create a replica of data already
    > loaded in memory.How can this be achieved
    >
    > thanks.


    Shared memory is available in the 'mmap' module. However, you can't
    share a Python list object between processes. The closest you can do
    is share a ctypes.Array or struct.Struct.
     
    Aaron Brady, Oct 30, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. DJ Dev
    Replies:
    3
    Views:
    16,145
    Gandalf
    Feb 8, 2004
  2. Replies:
    3
    Views:
    341
    Keith Thompson
    Dec 17, 2006
  3. Sune
    Replies:
    14
    Views:
    873
    Chris Thomasson
    Aug 26, 2007
  4. Sune
    Replies:
    5
    Views:
    435
    Darko
    Jul 13, 2007
  5. gunasingh
    Replies:
    2
    Views:
    2,382
    Keith Thompson
    Apr 5, 2008
Loading...

Share This Page