并行调用Google App Engine上的同一功能(并发)

时间:2019-01-29 14:02:42

标签: google-app-engine concurrency

我正在尝试使用python和Flask在Google App Engine(GAE)上构建Web应用程序。我想知道如何同时在应用程序中多次调用函数。例如,我有一个返回元素平方的函数。现在,我将此函数包装在这样的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实例中使用的是单核,因此性能没有得到改善,而且显然多线程同样徒劳。因此,阅读更多内容后,我被带到GAE的Cloud Tasks。但是我无法全神贯注地在Cloud Tasks上执行此操作。任何与此相关的示例/教程将不胜感激。如果您认为Cloud Tasks不是解决此问题的正确方法,是否可以在处理程序“ / list_of_numbers”下创建一个函数,该函数将同时向“ / single_number”处理程序发送多个列表?还是您建议其他方法?

我是Web应用程序构建和GAE的新手。因此,任何帮助将不胜感激。

预先感谢

1 个答案:

答案 0 :(得分:1)

这就是使用google taskqueue(它是Google Cloud Tasks的v1)的样子

    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之类的东西