Difference between revisions of "CS352 threadedpingWithLocks.py"

From dftwiki3
Jump to: navigation, search
(Created page with '--~~~~ ---- ;Exercise :Before trying the program below, modify the run() method so that its code is as follows: <source lang="python"> def run( self ): pingaling = os.po…')
 
 
Line 1: Line 1:
 
--[[User:Thiebaut|D. Thiebaut]] 01:28, 9 February 2010 (UTC)
 
--[[User:Thiebaut|D. Thiebaut]] 01:28, 9 February 2010 (UTC)
 
----
 
----
;Exercise
+
===Exercise===
:Before trying the program below, modify the run() method so that its code is as follows:
+
* Before trying the program below, modify the run() method so that its code is as follows:
 
<source lang="python">
 
<source lang="python">
 
   def run( self ):
 
   def run( self ):
Line 21: Line 21:
 
</source>
 
</source>
  
:Figure out why the output looks the way it does...
+
* Figure out why the output looks the way it does...
:Then try the code below...
+
* Then try the code below...
  
 +
===Solution===
 
<source lang="python">
 
<source lang="python">
 
#! /usr/bin/python
 
#! /usr/bin/python

Latest revision as of 21:29, 8 February 2010

--D. Thiebaut 01:28, 9 February 2010 (UTC)


Exercise

  • Before trying the program below, modify the run() method so that its code is as follows:
   def run( self ):
      pingaling = os.popen( "ping -q -c2 " + self.ip, "r" )
      while True:
         line = pingaling.readline()
         if not line: break
         igot = re.findall( self.lifeline, line)
         if igot:
            self.status = int( igot[0] )
            #self.lock.acquire()
            #self.list.append( "%s: %s" % ( self.ip, self.report[ self.status ] ) )
            self.list.append( "%s: %s" % self.ip  )
            doSomethingTimeConsuming()
            self.list.append( "%s: %s" %  self.report[ self.status ]  )
            #self.lock.release()
  • Figure out why the output looks the way it does...
  • Then try the code below...

Solution

#! /usr/bin/python
# threadedpingWithLocks.py
# D. Thiebaut
# from http://www.wellho.net/solutions/python-python-threads-a-first-example.html
# edited by D. Thiebaut
#
# Same version as previous threaded one, except now the threads are given
# access to a list of string to which they must append their message.
import os
import re
import time
import sys
from threading import Thread, Lock
 
class testIpThread( Thread ):
   def __init__ ( self, ip, lock, list ):
      Thread.__init__(self)
      self.ip = ip
      self.status = -1
      self.lock = lock
      self.list = list
      self.lifeline = re.compile(r"(\d) received")
      self.report =  ( "No response", "Partial Response", "Alive")
      
   def run( self ):
      pingaling = os.popen( "ping -q -c2 " + self.ip, "r" )
      while True:
         line = pingaling.readline()
         if not line: break
         igot = re.findall( self.lifeline, line)
         if igot:
            self.status = int( igot[0] )
            self.lock.acquire()
            self.list.append( "%s: %s" % ( self.ip, self.report[ self.status ] ) )
            #self.list.append( "%s: %s" % self.ip  )
            #doSomethingTimeConsuming()
            #self.list.append( "%s: %s" %  self.report[ self.status ]  )
            self.lock.release()

def doSomethingTimeConsumming():
    sum = 0
    for i in range( 100000 ):
        sum += i
        
def main():     
    pinglist = []
    lock = Lock()
    list = []
    for host in range(1,20):
       ip = "131.229.72."+str(host)
       current = testIpThread( ip,  lock, list )
       pinglist.append(current)
       current.start()
         
    for pingle in pinglist:
       pingle.join()

    for line in list:
        print line

    print "done!"

main()