Подтвердить что ты не робот

Python Multiprocessing: Какая разница между картой и imap?

Я пытаюсь узнать, как использовать пакет многопроцессорности Python, но я не понимаю разницы между map и imap.

Разница в том, что map возвращает, скажем, фактический массив или набор, а imap возвращает итератор по массиву или задан? Когда я буду использовать один над другим?

Кроме того, я не понимаю, что такое аргумент chunksize. Является ли это количеством значений, которые передаются каждому процессу?

4b9b3361

Ответ 1

В этом разница. Одна из причин, почему вы можете использовать imap вместо карты, - это если вы хотите начать обработку первых нескольких результатов, не дожидаясь вычисления остальных. карта ждет каждого результата перед возвратом.

Что же касается chunksize, иногда более эффективно выполнять работу в больших количествах, потому что каждый раз, когда рабочий запрашивает больше работы, есть IPC и накладные расходы на синхронизацию.

Ответ 2

imap - это модуль itertools, который используется для быстрой и эффективной памяти в python.Map будет возвращать список, где, когда imap возвращает объект, который генерирует значения для каждого итерации (в python 2.7). Ниже кодовые блоки очистят разницу.

Карта возвращает список, который можно распечатать напрямую

 from itertools import *
    from math import *

    integers = [1,2,3,4,5]
    sqr_ints = map(sqrt, integers)
    print (sqr_ints)

imap возвращает объект, который преобразуется в список и распечатывается.

from itertools import *
from math import *

integers = [1,2,3,4,5]
sqr_ints = imap(sqrt, integers)
print list(sqr_ints)

Chunksize сделает итерабельным, чтобы быть разбитым на куски заданного размера (приблизительный), и каждая часть передается в виде отдельной задачи.