views:

50

answers:

2

I am trying to learn how to use threads with python. this is the code I have been studying:

import time
from threading import Thread

def myfunc(i):
    print "sleeping 5 sec from thread %d" % i
    time.sleep(5)
    print "finished sleeping from thread %d" % i

for i in range(10):
    t = Thread(target=myfunc, args=(i,))
    t.start()

the program runs fine in command prompt but when I try to run it in idle I get errors like this:

Traceback (most recent call last):
  File "C:\Python24\lib\lib-tk\Tkinter.py", line 1345, in __call__
    return self.func(*args)
  File "C:\Python24\lib\idlelib\ScriptBinding.py", line 165, in run_module_event
    interp.runcode(code)
  File "C:\Python24\lib\idlelib\PyShell.py", line 726, in runcode
    self.tkconsole.endexecuting()
  File "C:\Python24\lib\idlelib\PyShell.py", line 901, in endexecuting
    self.showprompt()
  File "C:\Python24\lib\idlelib\PyShell.py", line 1163, in showprompt
    self.resetoutput()
  File "C:\Python24\lib\idlelib\PyShell.py", line 1178, in resetoutput
    self.text.insert("end-1c", "\n")
  File "C:\Python24\lib\idlelib\Percolator.py", line 25, in insert
    self.top.insert(index, chars, tags)
  File "C:\Python24\lib\idlelib\PyShell.py", line 315, in insert
    UndoDelegator.insert(self, index, chars, tags)
  File "C:\Python24\lib\idlelib\UndoDelegator.py", line 81, in insert
    self.addcmd(InsertCommand(index, chars, tags))
  File "C:\Python24\lib\idlelib\UndoDelegator.py", line 116, in addcmd
    cmd.do(self.delegate)
  File "C:\Python24\lib\idlelib\UndoDelegator.py", line 216, in do
    if text.compare(self.index1, ">", "end-1c"):
  File "C:\Python24\lib\lib-tk\Tkinter.py", line 2784, in compare
    return self.tk.getboolean(self.tk.call(
TclError: expected boolean value but got ""

Is python threading just not stable or am I doing something grossly wrong? The example came from : http://www.saltycrane.com/blog/2008/09/simplistic-python-thread-example/

+1  A: 

It sounds like a bug in IDLE, not a problem with Python. The error is coming from Tkinter, which is a Python GUI toolkit, and which IDLE probably uses. I would report it to whoever maintains IDLE.

Rob Lourens
+1  A: 

Not everything runs properly under IDLE. This is because IDLE is a Python program in itself and has its own attributes and state that can sometimes get messed up by your own code. You can tell this is a problem with IDLE because you can see idlelib in the call stack. Also, you're not using TCL/TK at all in your application, but IDLE is, and the call stack shows that too.

I would advise switching to a more 'inert' text editor for working with Python code!

Kylotan