2016-11-18 72 views
3

编辑:实际上发生的事情是我在程序员的记事本中运行它,它等待程序完成之后捕获标准输出并将其打印到控制台,然后我从它的工作作为预期。这种行为是显而易见的,也是我所期望的,我只是没有意识到我正在程序员的记事本中运行程序,而不像我通常那样运行程序。我的错。奇怪的Python线程行为


我与Python线程玩,但遇到了这个奇怪的问题在那里,如果我有一个打印语句和回调函数内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到这样的行为,我怎么能得到它的行为如同我期望的那样?

+0

我无法重现你的问题。这些对我来说都完全一样。他们每个打印你好,世界!然后等一下,三次。他们的表现如何? – user3030010

+0

对我来说程序暂停3秒,然后打印Hello world 3次O.o – Dmitry

+0

等等,现在它工作正常,我没有更改代码...我很困惑。 – Dmitry

回答

2

根据你的意见,我有一种感觉,你的问题是由于系统不刷新标准输出。您的打印功能之后

import sys 

然后:要解决这个问题,试试这个

sys.stdout.flush()