Я только что попытался реализовать код 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?