这真令人困惑,我找不到答案。
import thread
import time
import random
import sys
sys.stdout.flush()
def run_often(thread_name, sleep_time):
while True:
time.sleep(sleep_time)
print "%s" % (thread_name)
def run_randomly(thread_name, sleep_time):
while True:
time.sleep(sleep_time)
print "%s" % (thread_name)
thread.start_new_thread(run_often,("Often runs", 2))
thread.start_new_thread(run_randomly, ("Fast and random", random.random()))
问题是这不打印。在终端中,我键入python threading.py(即文件名)并且不输出错误。所以代码编译但它只是不打印。换句话说,就是这样:
$ python threading.py
$
我添加了sys.stdout.flush(),认为stdout需要重置,但无济于事。当我添加一个随机的打印语句,如" hello world"在任何函数的while循环之外,它被打印出来。此外,当我在ipython中运行完全相同的代码时,它会完美打印。这是从YouTube教程复制而来的,不是我自己的代码。
关于它为什么不打印的任何想法? Python I' m运行是2.7.8。 提前谢谢。
答案 0 :(得分:4)
根据thread
文档,
当主线程退出时,系统定义其他线程是否存活。在使用本机线程实现的SGI IRIX上,它们存活下来。在大多数其他系统上,它们被杀死而不执行try ... finally子句或执行对象析构函数。
所以很可能你的子线程在被打印之前被终止,因为主线程结束得太快了。
快速解决方案是让主线程在结束之前等待;添加time.sleep
方法作为最后一行。
您也可以使用threading
而不是thread
,并使用Thread.join
,这会强制主线程等到子线程执行完毕。