Как эмулировать multiprocessing.Pool.map () в AWS Lambda? - PullRequest
0 голосов
/ 27 мая 2019

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, сталкивающегося с этим, идти и развиватьих собственный обходной путь.Я надеюсь, что выполнил свою часть работы, перераспределив это в ясный вопрос с предполагаемыми строительными блоками, готовыми к работе.

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