You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:23:16