Python 3.2 _thread模块使用Ubuntu 12.04不产生输出,但与Windows 7一起正常工作

时间:2012-08-20 04:26:29

标签: multithreading python-3.x

我希望有人能够快速轻松地解决我所面临的这个问题。我正在完成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$ 

非常感谢任何帮助。

感谢。

2 个答案:

答案 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上没有。那好吧。希望这有时可以帮到某人。