home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/env python
- #############################################################################
- # Copyright (C) DSTC Pty Ltd (ACN 052 372 577) 1997
- # All Rights Reserved.
- #
- # The software contained on this media is the property of the DSTC Pty
- # Ltd. Use of this software is strictly in accordance with the
- # license agreement in the accompanying LICENSE.HTML file. If your
- # distribution of this software does not contain a LICENSE.HTML file
- # then you have no rights to use this software in any manner and
- # should contact DSTC at the address below to determine an appropriate
- # licensing arrangement.
- #
- # DSTC Pty Ltd
- # Level 7, Gehrmann Labs
- # University of Queensland
- # St Lucia, 4072
- # Australia
- # Tel: +61 7 3365 4310
- # Fax: +61 7 3365 4311
- # Email: enquiries@dstc.edu.au
- #
- # This software is being provided "AS IS" without warranty of any
- # kind. In no event shall DSTC Pty Ltd be liable for damage of any
- # kind arising out of or in connection with the use or performance of
- # this software.
- #
- # Project: Distributed Environment
- # File: $Source: /units/arch/src/Fnorb/examples/threaded/RCS/client.py,v $
- # Version: @(#)$RCSfile: client.py,v $ $Revision: 1.1 $
- #
- #############################################################################
- """ Client for the multi-threaded example. """
-
-
- # Standard/built-in modules.
- import sys, time, thread
-
- # Fnorb modules.
- from Fnorb.orb import CORBA
-
- # Stubs generated by 'fnidl'.
- import HelloWorld
-
-
- class Client:
-
- def __init__(self, server, num_threads):
- """ Constructor. """
-
- self.__server = server
- self.__num_threads = num_threads
- self.__lk = thread.allocate_lock()
-
- return
-
- def start(self):
- """ Start the threads. """
-
- for i in range(self.__num_threads):
- thread.start_new_thread(self.__worker_thread, (i,))
-
- return
-
- def wait(self):
- """ Wait for all threads to complete. """
-
- self.__lk.acquire()
- num_threads = self.__num_threads
- self.__lk.release()
-
- while num_threads > 0:
- time.sleep(2)
-
- self.__lk.acquire()
- num_threads = self.__num_threads
- self.__lk.release()
-
- return
-
- #########################################################################
- # Private interface.
- #########################################################################
-
- def __worker_thread(self, thread_no):
- """ Worker thread. """
-
- print 'Thread:', thread_no, 'Started...'
-
- # Payload!
- payload = '\0' * 16000
-
- # Time 100 calls!
- start = time.time()
- for i in range(100):
- self.__server.hello_world(payload)
- end = time.time()
-
- print 'Thread:', thread_no, 'Time taken:', end - start
-
- self.__lk.acquire()
- self.__num_threads = self.__num_threads - 1
- self.__lk.release()
-
- thread.exit()
-
-
- def main(argv):
- """ Do it! """
-
- print 'Initialising the ORB...'
-
- # Initialise the ORB.
- orb = CORBA.ORB_init(argv, CORBA.ORB_ID)
-
- # Read the server's stringified IOR from a file (this is just a 'cheap and
- # cheerful' way of locating the server - in practise the client would use
- # the naming or trader services).
- stringified_ior = open('server.ref', 'r').read()
-
- # Convert the stringified IOR into an active object reference.
- server = orb.string_to_object(stringified_ior)
-
- # Create a client with 10 threads!
- client = Client(server, 10)
-
- # Start the threads.
- client.start()
-
- # Wait for them all to complete.
- client.wait()
-
- print 'All threads complete!'
-
- return 0
-
- #############################################################################
-
- if __name__ == '__main__':
- # Do it!
- sys.exit(main(sys.argv))
-
- #############################################################################
-