Basic Python Question

Peter Abel PeterAbel at gmx.net
Thu Jul 22 14:53:46 EDT 2004


"Richard Spooner" <rspooner at frisurf.no> wrote in message news:<6ZLLc.4839$Mq3.91303 at news4.e.nsc.no>...
> Hey,
> 
> I'm very new to python and am trying to do the following.  I may get the
> jargon wrong at times but hopefully you can see what I'm trying to do...
> 
> I have created a threaded class which sets up a socket and then binds to a
> port.  When I make a new instance I send the port number and I would like
> the __init__ routine to set up the socket and then attempt to bind it to a
> port.
> 
> If I already have an instance of this class running then obviously I'll
> already have a port bound.  So if I try and create another instance with the
> same port I'd like the program to flag this error and inform the user that
> it is instead using the original instance..
> 
> So far I have this
> 
> import threading
> import socket
> import struct
> 
> class dataretriever(threading.Thread):
>     def __init__(self, port):
>         threading.Thread.__init__(self)
>         self.setDaemon(1)
>         self.resultQueue = resultsQueue
>         self.s = socket.socket( socket.AF_INET, socket.SOCK_DGRAM )
>         try:
>             self.s.bind(( '', port))
>         except:
>             print "Error binding worker"
> 
> 
>         self.start()
>     def run(self):
>         while 1:
>             pass
>             #playing with the data I recieve
> 
> 
> x = dataretriever(9999)
> y = dataretriever(9999)
> 
> When it tries to define y,  I'd like it to say "Port xxxx already in use by
> x setting y = x"
> 
> Any ideas???
> 
> Thanks for your time, seems to be a good little language.
> 
> Dave

Maybe not a big hit but could be an approach:

>>> class dataretriever(threading.Thread):
... 	__port = None
... 	__instance = None
... 	def __init__(self,port):
... 		if port == dataretriever.__port:
... 			print 'Error binding worker'
... 			self.__dict__ = dataretriever.__instance.__dict__
... 			return
... 		else:
... 			dataretriever.__port = port
... 			dataretriever.__instance = self
... 			self.do_what_ever_you_want_to_do()
... 	def do_what_ever_you_want_to_do(self):
... 		print 'I do it'
... 
>>> a=dataretriever(2)
I do it
>>> b=dataretriever(2)
Error binding worker
>>> id(a)
12281616
>>> id(b)
14817928
>>> a.foo='bar'
>>> b.foo
'bar'
>>> 

Regards
Peter



More information about the Python-list mailing list