2016-11-18 78 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()