为什么我的代码没有按顺序执行?

时间:2019-07-25 21:36:09

标签: python python-module

在尝试解决更大的问题时,我将代码简化为两个简单的命令,但发现它们没有按顺序执行。

我在单击按钮时调用此函数,希望它首先打印第一个语句,然后在3秒钟后打印第二个语句。

def onStartSegmentation(self):
      print("1st step: Starting segmentation")

      sleep(3)
      print("2nd step: Starting segmentation")

但是,结果是休眠3秒钟,然后立即一个接一个地打印两个命令。

我知道这听起来很愚蠢,但是我无法猜出为什么会这样。我在python Idle上尝试过它,效果很好。

我实际上想做的是通过线程将一些用户的反馈添加到我在Slicer中的模块(进度条/状态),但是我发现运行所有代码后,Slicer最终会打印所有内容。同时,我希望它可以在执行过程中进行打印。

2 个答案:

答案 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是一个管理并发代码的库,因此可以更改指令的顺序。