Looking for threading tutorial/HOWTO

Aahz Maruch aahz at netcom.com
Sat Jan 8 11:44:21 EST 2000


In article <m3zougva3q.fsf at havenrock.com>,
Matt Gushee  <mgushee at havenrock.com> wrote:
>
>I would like to learn how to program threads in Python. Or maybe I
>should say, I'd like to use threads in a Python program, so I need to
>learn how they work. Can anyone recommend a good online 
>introduction to the subject (I like books but can't afford to buy one
>just now)? Code examples might be good, too, if they are well commented.

This following code example is not well-documented, but should be pretty
easy to follow; it's designed to test a web server with multiple
clients:

import urllib, time
import threading

retrieveDoc = 1
numPings = 20
numThreads = 5

url = 'http://www.foo.com/'



class ping ( threading.Thread ) :
	def __init__ ( self, url, numPings, retrieveDoc=1 ) :
		self.url = url
		self.numPings = numPings
		self.retrieveDoc = retrieveDoc
		threading.Thread.__init__(self)

	def run ( self ) :
		StartTime = time.time()
		for i in range(self.numPings):
			page = urllib.urlopen ( self.url )
			if self.retrieveDoc:
				page.read()
			page.close()
		EndTime = time.time()
		self.TotalTime = EndTime - StartTime



if __name__ == '__main__' :
	threadList = []
	for i in range(numThreads) :
		thread = pingPing ( url, numPings, retrieveDoc )
		threadList.append ( thread )

	StartTime = time.time()
	for thread in threadList :
		thread.start()

	while threading.activeCount() > 1 :
		print ".",
		time.sleep(1)
	EndTime = time.time()
	TotalTime = EndTime - StartTime
	print

	TotalPings = 0
	ThreadTime = 0
	for thread in threadList :
		TotalPings = TotalPings + thread.numPings
		ThreadTime = ThreadTime + thread.TotalTime

	PingAvg = TotalPings / TotalTime
	ResponseAvg = ThreadTime / TotalPings

	print "Threads: ", numThreads
	print "Pings:", TotalPings
	print "Total time:", TotalTime
	print "Pings per second:", PingAvg
	print "Average response time (secs):", ResponseAvg

--
                      --- Aahz (@netcom.com)

Androgynous poly kinky vanilla queer het    <*>     http://www.rahul.net/aahz/
Hugs and backrubs -- I break Rule 6

The problem with an ever-changing .sig is that you have to keep changing it.



More information about the Python-list mailing list