【问题标题】:Task Queues or Multi Threading on google app engine谷歌应用引擎上的任务队列或多线程
【发布时间】:2012-01-28 17:25:56
【问题描述】:

我的服务器在 Google App Engine 上 我的工作之一是将大量记录与另一个匹配。 如果我必须将 10000 条记录与 100 条记录匹配,这需要很长时间。 实现这一点的最佳方式是什么。

我正在使用 Web2py 堆栈并将我的应用程序部署在 Google App Engine 上。

【问题讨论】:

    标签: python multithreading google-app-engine web2py task-queue


    【解决方案1】:

    也许我误解了某些东西,但是这听起来像是任务队列的完美匹配,而且我看不出多线程将如何帮助,因为我认为这只是你可以同时提供许多响应的唯一ment,它不会'如果您的回复时间超过 30 秒的限制,则无济于事。

    对于一个任务,您可以添加它,然后处理到时间限制,如果您在时间限制之前还没有完成工作,则使用剩余的任务重新创建另一个任务。

    【讨论】:

    • 它不是网络服务请求。它是一个 cron 作业,它定期执行。因此,我的主要工作是将 1000 个比较分解为更少,并将任务添加到队列中。这有意义吗?
    【解决方案2】:

    GAE 不支持多线程代码,因此您不能明确使用它。

    GAE本身可以是多线程的,也就是说一个前端实例可以同时处理多个http请求。

    在您的情况下,实现并行任务执行的最佳方式是任务队列。

    【讨论】:

    【解决方案3】:

    您所做工作的基本结构是让 cron 作业负责将工作划分为更小的单元,并使用任务队列执行每个单元。每个任务的有效负载将是标识第一组中的实体的信息(例如一组键)。每个任务将执行任何必要的查询,以将第一组中的实体与第二组中的实体连接起来,并存储中间(或者可能是最终)结果。您可以调整有效负载大小和任务队列速率,直到它以您想要的方式执行。

    如果需要汇总每个任务的结果,您可以让每个任务记录其完成情况并测试所有任务是否已完成,或者只是让另一个作业轮询完成记录来触发聚合。当 MapReduce 功能更广泛地可用时,它将成为执行此类工作的框架。

    http://www.youtube.com/watch?v=EIxelKcyCC0 http://code.google.com/p/appengine-mapreduce/

    【讨论】:

    • 非常感谢。我看过你提到的视频,但我有一个问题。 MapReduce Pipeline 不能确保处理大量数据。我真的需要分解成更小的比较块吗?
    • 正确,MapReduce 实用程序将负责分块和执行。您提供地图和归约。 :) 在我上面的回答中,如果您不使用 MapReduce,而是直接使用任务和任意数量的数据来实现这一点,那么“将工作划分为更小的单元”就是您要做的。以这种方式思考它会给你一个旋钮,你可以转动它来调整性能:每个任务的记录数。您可以为每条记录创建一个任务,即 10,000 个任务,但这可能不是资源的最佳利用方式。
    猜你喜欢
    • 2012-11-13
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多