Pythn에서 multipprocessing을 사용하여 병렬로 실행할 때, 모든 과정의 진도표를 tqdm로 표시합니다

개요


Python에서 multipprocessing을 사용하여 병렬 처리를 실행할 때, 나는 모든 과정이 진도를 표시할 때가 있다고 생각한다.
따라서 tqdm를 사용하면 모든 과정에 술집이 표시됩니다.
참조: tqdm

목표


모든 프로세스의 독립된 진도표를 표시합니다!

Code

from time import sleep
import random
from tqdm import tqdm
from multiprocessing import Pool, freeze_support, RLock

L = 8


def long_time_process(p):
    info = f'#{p:>2} '  # 進捗バーの左側に表示される文字列
    for _ in tqdm(range(20), desc=info, position=p+1):
        sleep(random.random())
    return p * 2


if __name__ == '__main__':
    freeze_support()  # Windows のみ必要
    with Pool(L,
             # Windows のみ必要
             initializer=tqdm.set_lock, initargs=(RLock(),)) as p:
             result = p.map(long_time_process, range(L))
    print("\n" * L)  # tqdm終了後のカーソル位置を最下部に持ってくる
    print(result)

해설

long_time_process: 병렬 실행하려는 함수freeze_support, initializer, initargs: Windows만 있으면 된다고 합니다.Mac는 이것을 아껴도 문제없다.position=p+1: 원래 포지션은 0에서 시작하기 때문에 이미지를 보여주기 위해 프로그램을 실행할 때 위에 한 줄의 공간이 있습니다.position=0에서 표시하면 맨 위에 있는 진도표가 끝날 때 전체 표시가 편차가 발생하기 때문에 여기는 1부터 시작합니다.
(보완) 포지션의 동작은 OS와 실행 시 환경에 따라 달라진다.이 근처position=pposition=p+1냐, 나는 실제 시도를 한 후에 예쁘게 행동하는 것이 좋다고 생각한다.

결실


레이아웃이 변하지 않고, 진도표의 표시와 그 다음의 print 출력이 모두 가능합니다.

좋은 웹페이지 즐겨찾기