Google 应用引擎:获取大量网址和数据处理
Google app engine: fetching a lot of urls and data processing
在我的应用程序中,我获取了大量的 url 并解析信息。
我正在尝试使用延迟库和任务队列。
我通过以下处理将每个页面的提取分成单独的任务。
以下是延迟任务的示例:
def deftask(somevalue, pagenumber):
fetch url
parse with beautiful soup
some processing
saving to datastore
之后在 post 处理程序中我 运行 这个任务在循环中:
for i in range(0, 200):
deferred.defer(deftask, somevalue, i)
所以仅仅 200 次迭代大约需要 5-8 分钟。好长啊
与任务队列相同的性能。我也在循环中发送任务:
taskqueue.add(url='/taskhandler', params = {'page' : i}, transactional=True)
只有一个队列。
所以我的问题是如何提高性能?
我应该改变我的方法吗?或者可能是护目镜应用引擎不适合这个目标?我应该将我的项目移动到 VPS 使用 django 等托管?
您可以在 queue.yaml 中控制执行时间,例如将速率设置为 10/s。请确保您的模块配置设置为自动缩放,或使用适当的手动缩放。
queue:
- name: default
rate: 5/s
还要查看您的日志并查找失败的任务,这可能是它们需要这么长时间才能完成的原因。
对每个使用单独的任务:
fetch url
parse with beautiful soup
some processing
saving to datastore
因此,如果 parse with beautiful soup
失败,它不会再次获取此 url,但会从数据存储中获取此内容。
在我的应用程序中,我获取了大量的 url 并解析信息。 我正在尝试使用延迟库和任务队列。 我通过以下处理将每个页面的提取分成单独的任务。 以下是延迟任务的示例:
def deftask(somevalue, pagenumber):
fetch url
parse with beautiful soup
some processing
saving to datastore
之后在 post 处理程序中我 运行 这个任务在循环中:
for i in range(0, 200):
deferred.defer(deftask, somevalue, i)
所以仅仅 200 次迭代大约需要 5-8 分钟。好长啊
与任务队列相同的性能。我也在循环中发送任务:
taskqueue.add(url='/taskhandler', params = {'page' : i}, transactional=True)
只有一个队列。
所以我的问题是如何提高性能?
我应该改变我的方法吗?或者可能是护目镜应用引擎不适合这个目标?我应该将我的项目移动到 VPS 使用 django 等托管?
您可以在 queue.yaml 中控制执行时间,例如将速率设置为 10/s。请确保您的模块配置设置为自动缩放,或使用适当的手动缩放。
queue:
- name: default
rate: 5/s
还要查看您的日志并查找失败的任务,这可能是它们需要这么长时间才能完成的原因。
对每个使用单独的任务:
fetch url
parse with beautiful soup
some processing
saving to datastore
因此,如果 parse with beautiful soup
失败,它不会再次获取此 url,但会从数据存储中获取此内容。