奇怪的Python线程行为

时间:2016-11-18 16:36:57

标签: python multithreading

编辑:实际上发生的事情是我在Programmer的记事本中运行它并等待程序完成,然后捕获stdout输出并将其打印到控制台,然后我运行它来自mingw,按预期工作。这种行为是显而易见的,我只是没有意识到我在程序员的记事本中运行程序,而不是像往常一样运行shell。我的坏。

我正在使用Python线程,但遇到了这个奇怪的问题,如果我在回调函数中有一个print语句和1秒睡眠语句,它就不会进行打印直到睡眠时间的总和已经过去了。

这是导致此行为的代码:

import threading
import time

def callback():
    for i in range(3):
        print "Hello, World!";
        time.sleep(1)

myThread = threading.Thread (
    target = callback, 
    args = []
)

myThread.start()

这就是我希望它表现的方式:

public class Demo
{    
    public static void main(String[] args)
    {
        (new Thread(() -> {
            for (int i = 0; i < 3; ++i) {
                System.out.println("Hello, World!");
                try {
                    Thread.sleep(1000);
                } catch(Exception e){
                    // rethrow as an unchecked exception but do not silence it.
                    throw (RuntimeException)e; 
                }
            }
        })).start();
    }
}

是什么导致Python以这种方式运行,我怎样才能让它按照我期望的方式运行?

1 个答案:

答案 0 :(得分:2)

根据您的评论,我感觉您的问题是由于系统没有刷新标准输出。要解决此问题,请尝试以下方法:

import sys

然后就在你的打印功能之后:

sys.stdout.flush()