Newbie having issues with threads

J

James Calivar

I'm a newbie trying to write a script that uses threads. I'm right
now a little bit stuck in understanding why the code snippet I wrote
doesn't seem to be entering the function defined in the
start_new_thread() call.

If I run it as is (the threaded version), the output is:

UA_1 configuring...
UA_1 halting..

But if I comment out the line w/ the thread and just call the function
directly, everything seems to work OK:

UA_1 configuring...
UA_1 executing...
UA_1 halting...

Can anyone tell me why the thread doesn't seem to invoke the function
"execute()"? I'm running Python 2.4.3.

Here is my code:

===========
import thread

class Test(object):
def __init__(self, instanceID):
self.instanceID = instanceID
def configure(self):
print self.instanceID + " configuring..."
def execute(self):
print self.instanceID + " executing..."
def halt(self):
print self.instanceID + " halting..."

if __name__ == "__main__":
"""usage: sipp_auto [options]"""

ua1 = Test("UA_1")

ua1.configure()

#ua1.execute()
thread.start_new_thread(ua1.execute, ())

ua1.halt()

===========
Thanks, James
 
J

James Calivar

Well, that seemed to do the trick. Thanks for the tip! I guess as a
novice and having no investment in the older "thread" module, I'll
just use the Threading module from now on.

James
=====

PS Here is my new code snippet:
=====

#!/usr/bin/python

import threading

class Test(object):
def __init__(self, instanceID):
self.instanceID = instanceID
def configure(self):
print self.instanceID + " configuring..."
def execute(self):
print self.instanceID + " executing..."
def halt(self):
print self.instanceID + " halting..."

class testThread(threading.Thread):
def __init__(self, ID):
self.ID = ID
threading.Thread.__init__(self)
def run(self):
ua1.execute()

if __name__ == "__main__":
"""usage: sipp_auto [options]"""

ua1 = Test("UA_1")

ua1.configure()

thread = testThread("UA_1")
thread.start()
thread.join()

ua1.halt()
 
R

Raja Baz

I'm a newbie trying to write a script that uses threads. I'm right now
a little bit stuck in understanding why the code snippet I wrote doesn't
seem to be entering the function defined in the start_new_thread() call.

If I run it as is (the threaded version), the output is:

UA_1 configuring...
UA_1 halting..

But if I comment out the line w/ the thread and just call the function
directly, everything seems to work OK:

UA_1 configuring...
UA_1 executing...
UA_1 halting...

Can anyone tell me why the thread doesn't seem to invoke the function
"execute()"? I'm running Python 2.4.3.

Here is my code:

===========
import thread

class Test(object):
def __init__(self, instanceID):
self.instanceID = instanceID
def configure(self):
print self.instanceID + " configuring..."
def execute(self):
print self.instanceID + " executing..."
def halt(self):
print self.instanceID + " halting..."

if __name__ == "__main__":
"""usage: sipp_auto [options]"""

ua1 = Test("UA_1")

ua1.configure()

#ua1.execute()
thread.start_new_thread(ua1.execute, ())

ua1.halt()

===========
Thanks, James

I've run into this problem before. The main problem is that the thread
started via start_new_thread exits when the program does(instead of
finishing its work first). So what happens here is that sometimes it may
have the time to execute, and sometimes it won't

changing:
thread.start_new_thread(ua1.execute, ())

ua1.halt()

to:
thread.start_new_thread(ua1.execute, ())
from time import sleep
sleep(0.01) # this is barely even noticeable

ua1.halt()

fixes the problem in this case and the output is correct.

However, you seem to have taken up using the threading module which is
probably better anyway, just wanted to explain why this was happening.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top