Использование нескольких map_async (Multiprocessing) в Python3 - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть пример кода, который использует map_async в многопроцессорной обработке с использованием Python 3. Я пытаюсь выяснить, как я могу запускать map_async (a, c) и map_async (b, d) одновременно.Но похоже, что второй оператор map_async (b, d), кажется, запускается, когда заканчивается первый.Есть ли способ запустить две функции map_async для одновременного запуска?Я пытался искать в Интернете, но не получил ответ, который хотел.Ниже приведен пример кода.Если у вас есть другие предложения, я очень рад их выслушать.Спасибо всем за помощь!

from multiprocessing import Pool
import time
import os

def a(i):
  print('First': i)
  return

def b(i):
  print('Second': i)
  return

if __name__ = '__main__':
  c = range(100)
  d = range(100)

  pool = Pool(os.cpu_count())
  pool.map_async(a, c)
  pool.map_async(b, d)

  pool.close()
  pool.join()

1 Ответ

0 голосов
/ 18 декабря 2018

map_async просто разбивает итерируемое на набор кусков и отправляет эти куски через os.pipe рабочим.Таким образом, два последующих вызова map_async будут отображаться рабочим как единый список, составленный объединением двух вышеупомянутых наборов.

Это правильное поведение, поскольку работникам действительно все равно, к какому map_async вызову относится чанк.Параллельный запуск двух map_async не принесет никаких улучшений в плане скорости или пропускной способности.

Если по какой-либо причине вам действительно нужно выполнить два вызова параллельно, единственный способ - создать два разных Pool объектов.Тем не менее, я бы рекомендовал против такого подхода, поскольку это сделало бы вещи гораздо более непредсказуемыми.

...