2016-11-18 14 views
3

EDIT:実際には、プログラマーのメモ帳で実行し、プログラムが完了するのを待ってからstdoutの出力をキャプチャしてコンソールに出力するまで待ってから、mingw期待される。この動作は明白であり、予想されています。プログラマのメモ帳で、通常はそうではなくシェルではなく、プログラムを実行していただけです。私の悪い。Strange Pythonスレッドの振る舞い


私は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はこのように動作させること、そしてどのように私は得ることができている何それは私がそれを期待するように行動する?

+0

私はあなたの問題を再現することはできません:右あなたの印刷機能の後に続いて

import sys 

:それを修正するには、これを試してみてください。これらは両方ともまったく同じように動作します。彼らはそれぞれ、こんにちは、世界!次に、3回目を待ってください。彼らはどのようにあなたのために行動していますか? – user3030010

+0

私のためにプログラムは3秒間停止し、次にHello world 3回O.oを出力します。 – Dmitry

+0

待って、今は正しく動作していますが、コードを変更していません...混乱します。 – Dmitry

答えて

2

お客様のご意見に基づき、システムが標準出力をフラッシュしていないために問題が発生していると感じています。

sys.stdout.flush()