andrew-pythonlist at puzzling.org
Thu Jan 30 04:57:34 CET 2003
On Wed, Jan 29, 2003 at 08:51:13AM +0100, Lukas Kubin wrote:
> Thank you for answer. OK, I will describe it better.
> The doTheAction() function is defined in the Control class and looks
> almost like this:
> def sendSignal(address,port,command):
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> s.connect((address, port))
> except socket.error, msg:
> s = None
> return "false"
> # Here follows processing of returned values,etc.
This is a complete jump sideways from your thread problems, but for handling
multiple simultaneous socket connections, you will probably find using
Twisted <http://twistedmatrix.com/> is easier than trying to do it yourself.
> The Control class is described in my previous letter bellow and the
> Computer (it is not class I just badly shorted it for example) object is a
> list of hostnames. So the main call looks like:
> if __name__ == '__main__':
> for comp in ['hostname1','hostname2']:
> thread = Control(comp)
> When I don't use the time.sleep() then it starts 2 threads of 'hostname2'.
> Thank you
What exactly do you mean by "2 threads of 'hostname2'"? Both threads
connect to hostname2?
I strongly suspect you have a bug in your Control class of it sharing the
hostname passed into the constructor between all instances, thus causing all
of your threads to use/connect/something that hostname. You might be using
"Control.foo = foo" instead of "self.foo = foo", or you might be sharing a
mutable between instances without realising, e.g. with:
shared =  # Lists are mutable, so changing this in one instance
# affects all other instances
More information about the Python-list