2010-07-15 42 views
1

我想学习如何使用python的线程。这是我一直在研究代码:如何在python中进行线程化?

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() 

程序运行在命令提示符处罚款,但是当我尝试在怠速运转,我得到象这样的错误:

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 "" 

是蟒蛇线程只是不稳定还是我在做一些严重错误的事情?这个例子来自:http://www.saltycrane.com/blog/2008/09/simplistic-python-thread-example/

+2

像往常一样,它只是空闲。我倾向于建议人们使用不同于IDLE的编辑器。真的只是IPython +你的fave编辑器 - vi(我的),notepad ++,Eclipse,Visual Studio ...只要你喜欢。将它与IPython结合起来,你确实拥有了一些力量。 – 2010-07-15 17:03:31

回答

1

这听起来像是IDLE中的一个错误,而不是Python的问题。这个错误来自Tkinter,它是一个Python GUI工具包,以及哪个IDLE可能使用。我会向任何维护IDLE的人报告。

1

并非所有东西都在IDLE下正常运行。这是因为IDLE本身就是一个Python程序,并且有自己的属性和状态,有时可能会被自己的代码搞乱。您可以告诉这是IDLE的一个问题,因为您可以在调用堆栈中看到idlelib。此外,您在应用程序中根本没有使用TCL/TK,但IDLE是,而且调用堆栈也显示了这一点。

我建议切换到一个更惰性的文本编辑器来处理Python代码!

相关问题