我希望有人能够快速轻松地解决我所面临的这个问题。我正在完成Mark Lutz编写的第4版Python编程的第5章,我在第189页开始遇到一些麻烦。基本上,有一个非常简单的例子:
import _thread
def action(i):
print(i ** 32)
_thread.start_new_thread(action, (2, ))
出于某种原因,这个脚本不会在运行Ubuntu 12.04的电脑上产生任何输出,但会在我的Windows 7机器上产生。从终端运行时的输出是:
un@homepc:~/Desktop/pp$ python3.2 thread1.py
un@homepc:~/Desktop/pp$
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
我不是线程专家,但这很可能是问题所在:
运行此代码时,Python在最后一行之后无需执行任何操作;因此它会强制退出线程(无论是否完成)。 根据线程的运行方式,线程可能会完成,也可能不会。 (不可靠的行为)
主线程伪代码指令:
创建新主题
新主题:
动作(2)
主线程下一条指令:
程序结束;退出
固定代码:
import _thread
def action(i):
print(i ** 32)
action_lock.release() #Now Python will exit
#locks are a part of threaded programming; if you don't know what it is, you can google it.
action_lock = _thread.allocate_lock() #set a lock for the action function thread
action_lock.acquire() #Acquire the lock
_thread.start_new_thread(action, (2, ))
action_lock.acquire()
答案 1 :(得分:0)
感谢Ramchandra指出我正确的方向。问题是该程序正在结束并杀死线程。如果我运行这个:
import time, _thread
def print_t(name, delay):
while True:
try:
time.sleep(delay)
print(name)
except: pass
_thread.start_new_thread(print_t, ("First Thread", 1,))
_thread.start_new_thread(print_t, ("Second Thread", 2,))
while True:
try: pass
except KeyboardInterrupt:
print("Ending main program")
break
...然后程序按计划执行。我没有答案为什么原始帖子中的代码在Windows 7上工作,而在ubuntu 12.04上没有。那好吧。希望这有时可以帮到某人。