Параллельные вызовы одной и той же функции в Google App Engine (параллелизм) - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь создать веб-приложение на Google App Engine (GAE), используя python и Flask.Я хочу знать, как вызвать функцию в приложении несколько раз одновременно.Например, у меня есть функция, которая возвращает квадрат элемента.Теперь я обертываю эту функцию под URL-адресом следующим образом:

@app.route('/single_number',methods = ['GET','POST'])
def square():
    x = request.form.get('input_number')
    return x*x

Теперь я хочу сделать это для списка чисел, но одновременно для 'http://localhost:8080/list_of_numbers'. Скажем, у меня есть список'n' чисел, и я хочу рассчитать квадрат каждого числа одновременно (если не все 'n' вместе, но по крайней мере, что позволяет Google App Engine).Я использовал многопроцессорную библиотеку Python, но не получил улучшения производительности из-за единственного ядра, используемого в экземпляре Google App Engine, и, очевидно, многопоточность также бесполезна.Итак, после прочтения я попал в Cloud Tasks of GAE.Но я не могу обернуться, выполняя это в облачных задачах.Любой образец / учебник, связанный с этим, будет принята с благодарностью.Если вы считаете, что облачные задачи не подходят для этой проблемы, возможно ли создать функцию в обработчике '/ list_of_numbers', которая будет одновременно отправлять несколько номеров списка обработчику '/ single_number'?Или вы предлагаете какой-либо другой метод?

Я новичок в создании веб-приложений и GAE.Так что, любая помощь будет принята с благодарностью.

Заранее спасибо

1 Ответ

0 голосов
/ 30 января 2019

Вот так это выглядело бы при использовании google taskqueue (который v1 из Google Cloud Tasks)

    from google.appengine.api import taskqueue

    queue = taskqueue.Queue('default')
    ndb.Future.wait_all(queue.add_async(taskqueue.Task(
        url='/single_number/,
        params={'input_number': i})) for i in input_numbers)

, который добавит пакет задач в очередь.Однако он не получит результаты звонков на /single_number/, поэтому каждая задача должна обрабатывать все, что будет дальше.

Ответ на ваш вопрос действительно зависит от того, что вы пытаетесь сделать, и от ожидаемого масштабавашей проблемы.

Такое чувство, что вы хотите использовать что-то вроде Google Dataflow

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