0

これは実際には質問ではありませんが、コードの改善であり、簡単な回避策をすでに考え出したので、どちらの方法でも他の人を助けるかもしれません.

「手動更新」関数 tqdm.update() が必要とする増分ではなく、モジュール「tqdm」からの進行状況バーに合計入力を与える方法を考えていました。

したがって、これを知る必要がある主な理由は、モジュール「pytube」からの YouTube ダウンローダーがダウンロードの進行状況を表示するためです。.download() 関数を呼び出すと、私に関する限り、データを取得して while ループを実行し、残りのバイト数を入力としてカスタムの「progressFunction」を呼び出します。ファイルのサイズに等しいグローバル変数を使用して、ダウンロードの合計進行状況 (ファイルのサイズから残りのサイズを引いたもの) を計算できるため、進行状況をログに記録できます。この場合、tqdm からのプログレス バーがこの合計進行状況を受け入れていればよかったのですが、繰り返しますが、.update() は反復回数の増分のみを受け入れます。

そのため、_tqdm.py コードを検索したところ、前の反復変数が self.n に格納されていることがわかりました。したがって、増分は次のように計算できます: inc = new_iter - pbar.n、ここで pbar は tqdm プログレス バー インスタンスです。

これを説明するための同様の関数のサンプル コードを次に示します。何も返さないが、別の関数に入力を与える while ループ関数があります。必要に応じてコピーして貼り付けると、0 から 100 までの単純な進行状況バーが表示されます。

import time
from tqdm import tqdm

def functExec(a):
    global pbar
    a_prev = pbar.n
    step_tqdm = a-a_prev
    pbar.update(step_tqdm)

def functLoop(functExec,range,step):
    a = 0 
    while a<range:
        a += step
        functExec(a)
        time.sleep(0.02)

N = 100
step = 1
pbar = tqdm(total=N/step)
functLoop(functExec,range=N,step=step)
pbar.close()

ご覧のとおり、pbar は tqdm プログレス バー インスタンスです。これは while ループが呼び出される前に初期化されます。関数「functLoop」では、変数「a」が「while ループ」で 0 から 100 までループされ、進行状況バーを更新する「functExec」を呼び出します。pbar.n が呼び出され、 pbar が更新される前の反復の値であることがわかります。単純に増分を取得するには、a-pbar.n が呼び出され、この pbar が .update() 関数で更新されます。

結論: はい、私が望んでいたように動作しますが、最初にステップを使用する代わりに、変数 "a" を使用して進行状況バーを合計進行状況に直接割り当てることができるかどうか疑問に思っています。

ウェブ上でこれを行う方法が見つからなかったので、4時間以上検索していました:)

編集: TLDR: 要するに、0 から 100 まで反復して tqdm で進行状況を文書化したいが、現在の反復値または合計進行状況しか取得できない場合。このコードで進行状況を表示することができましたが、「tqdm」モジュールに組み込み関数があるかどうか疑問に思っていました。現在のソース コードでは、進行状況バーを段階的に変更することしかできません。「合計」パラメータで tqdm オブジェクトのサイズを初期化し、現在の合計進行状況で進行状況を直接簡単に計算できるため、このような関数が必要なのは理にかなっています。

4

0 に答える 0