Как объединить TimeoutError и индикатор выполнения tqdm в многопроцессорной обработке? - PullRequest
0 голосов
/ 05 июня 2019

Я хотел бы выполнить многопроцессорную обработку, используя ОБА TimeoutError и индикатор выполнения tqdm.

Я успешно пробовал их отдельно. Как мне сочетать логику?

Цели:

  • Индикатор выполнения должен обновляться при каждом вызове imap_unordered

  • Каждый процесс должен быть проверен на TimeoutError

Я пробовал миллион способов их объединения (не показано). Каждый раз, когда я оборачиваю вызов imap_unordered с помощью tqdm, я не могу получить доступ к методу res.next для тайм-аута.

from multiprocessing import Pool, TimeoutError
from tqdm import tqdm

def runner(obj):
    obj.go()
    return obj

def dispatch(objs):

    with Pool() as pool:
        newObjs = list(tqdm(pool.imap_unordered(runner, objs), total=len(objs)))

    # need to find a way to integrate TimeoutError into progress bar
    # I've tried this a million ways using multiprocessing

    # try:
    #     res.next(timeout=10)
    # except TimeoutError:
    #     raise

    return newObjs

Код отлично работает для индикатора выполнения. Необходимо отслеживать, если какой-либо процесс превышает время ожидания.

...