Python извлечь элемент из итератора - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующий код, но я не могу получить результаты от итератора


from multiprocess import freeze_support
from pathos.multiprocessing import ProcessPool

if __name__ == "__main__":
    freeze_support()

    pool = ProcessPool(nodes=4)
    results = pool.uimap(pow, [1,2,3,4], [5,6,7,8])
    print("...")
    print(list(results))

Код не выдает ошибки, он просто зависает.

1 Ответ

0 голосов
/ 17 апреля 2020

Есть пара тонкостей, чтобы заставить это работать, но короткая версия imap или uimap являются итераторами в отличие от map в примере многопроцессорной обработки python. Чтобы извлечь результаты, он должен быть в течение l oop. Если внутри класса вам также нужно, чтобы вызываемый метод был @ staticmethod

from multiprocessing import freeze_support
from multiprocessing import Pool


def f(vars):
    return vars[0]**vars[1]


if __name__ == "__main__":
    freeze_support()

    pool = Pool(4)

    for run in pool.imap(f, [(1,5), (2,8), (3,9)]):
        print(run)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...