Как использовать multiprocessing.process () в AWS Lambda для замены .pool ()? - PullRequest
0 голосов
/ 14 февраля 2019

Итак, после выполнения некоторых домашних заданий по этой проблеме кажется, что multiprocessing.pool () не будет работать в AWS Lambda, но multiprocessing.process () должен работать.Проблема в том, что, когда я пытаюсь поменять код, который мне известен, работает с новым кодом .process (), я получаю список вместо значений, которые я ищу.Вот что я пытаюсь сделать:

(примечание: закомментированный код - это пример .pool (), который работает, тогда как .process () прямо под ним - это то, что ломает)

def evaluate_plans_parallel(foo, baz, bar):
score = {}
input_tuple = []
for k, v in plans.items():
    input_tuple.append({'somevar1': k, 'somevar3': v, 'somevar': foo,'somevar2': baz})

# score_list = []

# pool = multiprocessing.Pool(get_parallel_count())
# pool = multiprocessing.Pool(3)
# score_list = pool.map(evaluate_single_plan, input_tuple)

processes = []

score_list = []
for tup in input_tuple:
    process = Process(target=evaluate_single_plan, args=(tup,))
    processes.append(process)


for process in processes:
    process.start()

for process in processes:
    process.join()

print(processes)

for x in processes:
    for k, v in x.items():
        score[k] = v

top_score = sorted(score.values())[0]
print('Top score: {}: '.format(round(top_score, 3)))
return score

Я делаю что-то явно неправильное?

1 Ответ

0 голосов
/ 14 февраля 2019

Получается, что мне нужно было синхронизировать результаты, используя .pipe ():

processes = []
parent_connections = []

for tup in input_tuple:
    parent_conn, child_conn = Pipe()
    parent_connections.append(parent_conn)

    process = Process(target=evaluate_single_plan, args=(tup, child_conn,))
    processes.append(process)


for process in processes:
    process.start()

for process in processes:
    process.join()

for x in parent_connections:
    print(x.recv()])

и в функцииvalu_single_plan, вместо того, чтобы возвращать значение, которое мне просто нужно было отправить в аргумент child_conn, которыйбыло передано в:

child_conn.send(result)
child_conn.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...