Python на AWS Lambda не поддерживает multiprocessing.Pool.map()
, как описано в этот другой вопрос .Обратите внимание, что другой вопрос спрашивал, почему это не работает.Этот вопрос отличается, я спрашиваю, как имитировать функциональность, учитывая отсутствие базовой поддержки.
Один из ответов на этот другой вопрос дал нам этот код:
# Python 3.6
from multiprocessing import Pipe, Process
def myWorkFunc(data, connection):
result = None
# Do some work and store it in result
if result:
connection.send([result])
else:
connection.send([None])
def myPipedMultiProcessFunc():
# Get number of available logical cores
plimit = multiprocessing.cpu_count()
# Setup management variables
results = []
parent_conns = []
processes = []
pcount = 0
pactive = []
i = 0
for data in iterable:
# Create the pipe for parent-child process communication
parent_conn, child_conn = Pipe()
# create the process, pass data to be operated on and connection
process = Process(target=myWorkFunc, args=(data, child_conn,))
parent_conns.append(parent_conn)
process.start()
pcount += 1
if pcount == plimit: # There is not currently room for another process
# Wait until there are results in the Pipes
finishedConns = multiprocessing.connection.wait(parent_conns)
# Collect the results and remove the connection as processing
# the connection again will lead to errors
for conn in finishedConns:
results.append(conn.recv()[0])
parent_conns.remove(conn)
# Decrement pcount so we can add a new process
pcount -= 1
# Ensure all remaining active processes have their results collected
for conn in parent_conns:
results.append(conn.recv()[0])
conn.close()
# Process results as needed
Можетэтот пример кода может быть изменен для поддержки multiprocessing.Pool.map()
?
Что я пробовал до сих пор
Я проанализировал приведенный выше код и не вижу параметра для функциидля выполнения или данных, поэтому я предполагаю, что он не выполняет ту же функцию, что и multiprocessing.Pool.map()
.Непонятно, что делает код, кроме демонстрации строительных блоков, которые можно собрать в решение.
Это вопрос «напиши мой код для меня»?
Да, в некоторой степени, это так.Эта проблема затрагивает тысячи разработчиков Python, и она будет гораздо более эффективной для мировой экономики, меньшего количества выбросов парниковых газов и т. Д., Если мы все будем использовать один и тот же код, вместо того чтобы заставлять каждого пользователя SO, сталкивающегося с этим, идти и развиватьих собственный обходной путь.Я надеюсь, что выполнил свою часть работы, перераспределив это в ясный вопрос с предполагаемыми строительными блоками, готовыми к работе.