2017-01-30 4 views

答えて

1

tqdmはスレッドで動作します(プログレスバーが原因でアプリケーションが停止することはないため)。したがって、印刷前にプログレスバーが表示されます。

マシンは印刷がIOアクションであるため、マシンはtqdmを優先します。

ループの前後で眠る必要があります。これを行うには、ループの前後でtime.sleep(x)(xは秒)を使用して問題を停止します。あなたのコードの始めにimport timeを覚えておいてください。異なるxの値で試してみてくださいが、0.1だけでうまくいくでしょう。

+2

printの 'flush'キーワード引数を使って' print( "foo"、flush = True)のように表示することもできます。 – Copperfield

+0

Windowsではうまく動作しないようですが、待合よりもエレガントです – R3turnz

+0

これは、プリントアウトが間違った順序で終わる理由ではなく、Pythonが端末に印刷するさまざまなコマンドをどのくらい速く処理できるかによっては、一定の時間のスリープが失敗することもあります(この[ MWE](https://en.wikipedia.org/wiki/Minimal_Working_Example)睡眠はおそらく働くでしょう)。 'time.sleep'を使う必要がない解決策については私の答えを見てください。 – HelloGoodbye

0

問題は、printsys.stdoutに、デフォルトでtqdm by default prints to sys.stderrに出力され、非同期になります。

あなたはtqdmfile=sys.stdoutを指定するか、両方が同じストリームに印刷するためにprintfile=sys.sterrを指定するか、tqdmへの各呼び出しの後sys.stdout.flush前とsys.stderr.flushを呼び出すことができますすることができます。

+0

私の答えはなぜ下降したのですか?それは間違っていた? – HelloGoodbye

0

報告された解決策のいくつかがWindows 10でどのように機能したかを報告することができます.tqdmより前に実行された印刷によってtqdmのバー出力が中断される問題もありました。 私のために働いたソリューションは、

sys.stdout.flush() 

私はsys.stdout.flushはこれまでのところ、それはまさにとして最高だと思います

flush=True 

の印刷に加えしていなかったものです何が行われる必要があるか... stdoutの出力は、tqdmがstderrの最初の出力の前に完了するようにフラッシュする必要があります。最も基本的な入出力の問題です。

私はstdioの他の退屈な世界に少しの優雅さをもたらすこの小さなウィジェットの機能が大好きです。

関連する問題