17

実行中のアルゴリズムには時間がかかるため、コンソールに出力して、それがどこまで進んだかを追跡したいと考えています。

次のようなものです:

import sys

def myMethod():
    i = 0
    while (i<1000000):
        i = i+1
        output_str = str(i) + "\n"
        sys.stdout.write(output_str)  # same as print
        sys.stdout.flush()
    
myMethod()

最後ではなく、実行中にこの印刷を行うにはどうすればよいですか?

編集、解決策: - 修正コードを投稿しました。このコードは、次を使用してLinuxターミナルで実行すると正常に機能します

 python filename.py

しかし、Wing 101 IDE で実行すると、緑色の再生ボタン (「Python シェル内でエディターの内容を実行する」) を押して、プログラムが終了するまで待ってから出力します。

どうやら、Wing IDE で stdout をフラッシュすることはできません。

4

2 に答える 2

12
import sys

def myMethod():
    i = 0
    while (i<1000000):
        i = i+1
        output_str = str(i) + "\n"
        sys.stdout.write(output_str)  # same as print
        sys.stdout.flush()
于 2012-09-30T04:40:13.230 に答える
5

これがスレッドの目的です。ワーカー スレッドとプログレス スレッドを同時に実行できます。

import time
from threading import Thread

class WorkerThread(Thread):
    def __init__(self, value=0):
        super(WorkerThread, self).__init__()

        self.value = value

    def run(self):
        while self.value < 1000:
            self.value += 1
            time.sleep(0.01)

class ProgressThread(Thread):
    def __init__(self, worker):
        super(ProgressThread, self).__init__()

        self.worker = worker

    def run(self):
        while True:
            if not self.worker.is_alive():
                print 'Worker is done'
                return True

            print 'Worker is at', self.worker.value
            time.sleep(1.0)

if __name__ == '__main__':
    worker = WorkerThread()
    progress = ProgressThread(worker)

    worker.start()
    progress.start()

    progress.join()

コマンドの出力は次のとおりです。

Worker is at 1
Worker is at 99
Worker is at 197
Worker is at 295
Worker is at 394
Worker is at 492
Worker is at 590
Worker is at 689
Worker is at 787
Worker is at 885
Worker is at 983
Worker is done

ワーカー スレッドは1非常に速くカウントしていますが、進行状況スレッドは毎秒進行状況を報告しているだけであることに注意してください。

于 2012-09-30T04:40:59.820 に答える