在尝试解决更大的问题时,我将代码简化为两个简单的命令,但发现它们没有按顺序执行。
我在单击按钮时调用此函数,希望它首先打印第一个语句,然后在3秒钟后打印第二个语句。
def onStartSegmentation(self):
print("1st step: Starting segmentation")
sleep(3)
print("2nd step: Starting segmentation")
但是,结果是休眠3秒钟,然后立即一个接一个地打印两个命令。
我知道这听起来很愚蠢,但是我无法猜出为什么会这样。我在python Idle上尝试过它,效果很好。
我实际上想做的是通过线程将一些用户的反馈添加到我在Slicer中的模块(进度条/状态),但是我发现运行所有代码后,Slicer最终会打印所有内容。同时,我希望它可以在执行过程中进行打印。
答案 0 :(得分:3)
print()函数被缓冲。这意味着将在显示到屏幕之前对输出进行缓冲,直到缓冲区已满或遇到换行符为止。如果要立即在屏幕上显示输出,则需要使用sys.stdout.flush()刷新缓冲区,或者需要在print函数的参数中明确指定它。
"dates"
OR
def onStartSegmentation(self):
print("1st step: Starting segmentation", flush = True)
sleep(3)
print("2nd step: Starting segmentation", flush = True)
答案 1 :(得分:0)
您不是从sleep
而不是asyncio
导入time
吗?
asyncio
是一个管理并发代码的库,因此可以更改指令的顺序。