将async urlfetch与urllib2与谷歌应用引擎中的线程进行比较

时间:2013-02-20 16:50:43

标签: python google-app-engine asynchronous urlfetch

我必须异步运行suds, 我在考虑两个想法:

  1. (更简单)在单独的线程中运行每个suds调用因为GAE python 2.7运行时allows它。

  2. (更难)重写suds lib以在异步url fetch上运行

  3. 我想使用第一个选项,但不知道它是否比第二个选项慢得多。

    也许在GAE中有经验的人可以帮我选择?

    更新

    结果必须是单个Web请求,因此我无法使用任务队列/ mapreduce /后端

1 个答案:

答案 0 :(得分:1)

根据this question,suds不是线程安全的库。因此,您必须为每个想要使用suds客户端对象的线程创建一个新客户端。话虽如此,选择数字1将是您的最佳选择。

另外,请查看here以获取有关如何使suds库在GAE上使用缓存的信息。

<强>更新

尝试的其他技术(对于在单个Web请求中不需要结果的用例):

BackendsPull Queues :(如果您打算不断拨打电话,请使用此方法)

创建将suds客户端存储在内存中的always-on后端,并不断轮询pull队列以查找需要执行的任务。这样,您可以推送应用程序需要执行的许多任务/调用,并使多个后端以小块的形式使用数据。

<强> Task Queues

(如果您想尝试将成本降至最低并且不打算一直进行多次SOAP调用,请使用此方法)

创建任务,让AppEngine跨多个实例执行您的需求。只知道无法保证任务何时执行,但根据我的经验,这不是问题。