eventlet线程无输出问题咨询:为何程序执行后未打印结果?
问题分析与解决
嘿,我刚看了你的代码,问题其实很典型——主线程没等子线程跑完就直接退出了!
你用eventlet.spawn_n()创建的是后台线程,这类线程不会阻止主线程结束。当你的主线程执行完最后一行代码(创建t2)后,就直接退出了,这时候两个子线程还没来得及执行print语句,进程就终止了,所以你看不到任何输出。
另外还有个小笔误:cube函数里的打印字符串写错啦,应该是"cube={}"而不是"square={}",这个也顺手改了吧~
修复后的代码
你可以用eventlet.joinall()来等待所有子线程完成,或者分别调用每个线程对象的wait()方法,两种方式都可以:
方式1:用joinall等待所有线程
import eventlet eventlet.monkey_patch() def square(num): print "square={}".format(num*num) def cube(num): print "cube={}".format(num*num*num) t1 = eventlet.spawn_n(square, 10) t2 = eventlet.spawn_n(cube, 10) # 等待所有子线程执行完成 eventlet.joinall([t1, t2])
方式2:分别调用wait()
import eventlet eventlet.monkey_patch() def square(num): print "square={}".format(num*num) def cube(num): print "cube={}".format(num*num*num) t1 = eventlet.spawn_n(square, 10) t2 = eventlet.spawn_n(cube, 10) # 等待每个线程完成 t1.wait() t2.wait()
这样修改后,主线程会等两个子线程都执行完打印操作后才退出,你就能看到预期的输出啦:
square=100
cube=1000
内容的提问来源于stack exchange,提问作者Vidyadhar Lippy
相关产品推荐
相关产品推荐

