Многопроцессорная обработка Python с повторением предыдущих процедур - PullRequest
0 голосов
/ 15 октября 2018

Я только что попытался реализовать код Python, который использует многопроцессорность для выполнения функции f (x).Код довольно длинный, но суть в следующем:

from multiprocessing import Process, cpu_count, Queue


def apply_func(f, q_in, q_out):
   while not q_in.empty():
      i, x = q_in.get()
      q_out.put((i, f(x)))

# map a function using a pool of processes
def parmap(f, X, nprocs = cpu_count()):
  q_in, q_out   = Queue(), Queue()
  proc = [Process(target=apply_func, args=(f,q_in,q_out)) for _ in range(nprocs)]
  sent = [q_in.put((i, x)) for i, x in enumerate(X)]
  [p.start() for p in proc]
  res = [q_out.get() for _ in sent]
  [p.join() for p in proc]
  [p.terminate() for p in proc]
  return [x for i,x in sorted(res)]

def f(x):
   return some value

if __int__ == 'main':

  << step 1: run memory-heavy pre-processing procedure >>
  << step 2: compute several args for f(x) >>
  << step 3: run parmap(f,args) >>

Но проблема в том, что каждый раз, когда я запускаю шаг 3, процесс (каким-то образом, и я не знаю, почему) повторяетсявыполняет оба шага 1 и 2. Как я могу ограничить процесс для выполнения только f (x)?(поскольку мне не нужно повторно запускать шаг 1, который потребляет так много памяти).

Из кода в parmap только функция f (x) отображается на Process, так почему жесопоставить с шагами 1 и 2?

...