我正在尝试将多线程添加到Python应用程序中,因此从一些玩具示例开始:
import threading
def myfunc(arg1, arg2):
print 'In thread'
print 'args are', arg1, arg2
thread = threading.Thread(target=myfunc, args=('asdf', 'jkle'))
thread.start()
thread.join()
这很好用,但是当我尝试启动第二个线程时,我得到一个RuntimeError:
import threading
def myfunc(arg1, arg2):
print 'In thread'
print 'args are', arg1, arg2
thread = threading.Thread(target=myfunc, args=('asdf', 'jkle'))
thread2 = threading.Thread(target=myfunc, args=('1234', '3763763é'))
thread.start()
thread2.start()
thread.join()
thread2.join()
正如其他人似乎在运行此代码时没有问题,让我补充一点,我在Windows 7 x64 Pro上使用Python 2.6.3 32位(如果这很重要)。
答案 0 :(得分:1)
thread2 = threading.Thread(target=myfunc, args=('1234', '3763763é'))
您是否将该文件声明为UTF-8?------------------------------------- ---------------- ^
答案 1 :(得分:1)
你能发布你得到的确切错误吗?
对我来说运行正常(将é
字符替换为e
后):
In thread
args areIn thread
asdfargs are jkle1234
3763763e
如果我保留您发布的原始脚本并将文件保存为带有BOM的UTF-8在Windows上:
In thread
args areIn thread
asdfargs are jkle1234
3763763é
将您发布的代码保存为ASCII会导致语法错误:
SyntaxError:第8行文件threadtest.py中的非ASCII字符'\ xe9',但未声明编码;有关详细信息,请参阅http://www.python.org/peps/pep-0263.html
环境信息:
C:\ python -V
Python 2.6.2
C:\ CMD
Microsoft Windows XP [版本5.1.2600]
(C)版权所有1985-2001 Microsoft Corp.
答案 2 :(得分:0)
正如评论中所述,我认为问题来自IDLE本身,而不是来自我的代码。无论如何,谢谢你的帮助!
我赞成你的答案但会接受我的答案,因为这个问题没有真正的解决方案。
答案 3 :(得分:0)
也许是因为您在某个目录下拥有相同的文件名或项目名称,如“threading”或“Thread”,并且自启动以来您已经运行过一次。