On 21.02.2011 23:30, KevinSimonson wrote:
I've been teaching myself Python from the tutorial routed at "http://
www.tutorialspoint.com/python/index.htm". It's worked out pretty
well, but when I copied its multithreading example from the bottom of
the page at "http://www.tutorialspoint.com/python/
python_multithreading.htm" and tried to run it I got the error
messages:
C:\Users\kvnsmnsn\Python>python mt.py
Traceback (most recent call last):
File "mt.py", line 38, in<module>
thread = myThread(threadID, tName, workQueue)
File "mt.py", line 10, in __init__
self.name = name
File "C:\Python27\lib\threading.py", line 667, in name
assert self.__initialized, "Thread.__init__() not called"
AssertionError: Thread.__init__() not called
I don't really understand why it's giving me these messages.
<__initialized> gets set to<True> when<__init__()> gets called.
Granted my Python program calls<__init__()> with only one parameter,
and the constructor in "threading.py" takes _seven_ parameters, but
all but one have default values, so a call with just one parameter
should be legal. Why then is<__initialized> getting set to<True>?
My code follows.
That tutorial seems to be wrong.
According to the official docs:
"If the subclass overrides the constructor, it must make sure to
invoke the base class constructor (Thread.__init__()) before doing
anything else to the thread."
http://docs.python.org/library/threading.html#thread-objects
So, change your __init__ to this:
class myThread (threading.Thread):
def __init__(self, threadID, name, q):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
self.q = q
HTH
--
http://mail.python.org/mailman/listinfo/python-list