Starting threads
Andrew Bennetts
andrew-pythonlist at puzzling.org
Wed Jan 29 22:57:34 EST 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)
> try:
> s.connect((address, port))
> except socket.error, msg:
> s = None
> return "false"
> s.send(command)
> # Here follows processing of returned values,etc.
> s.close()
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)
> thread.start()
> time.sleep(.005)
>
> 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:
class Foo:
shared = [] # Lists are mutable, so changing this in one instance
# affects all other instances
...
-Andrew.
More information about the Python-list
mailing list