我是网络应用程序的新手,所以我不习惯担心CPU限制,但我看起来我会遇到这个代码的问题。我在google的配额页面中读到,我每天可以使用6.5 CPU小时,每分钟15 CPU,分钟。
谷歌说:CPU时间以“秒”报告,相当于CPU周期数 可以在这段时间内通过1.2 GHz Intel x86处理器执行。实际上 根据App Engine内部的条件,花费的CPU周期数会有很大差异, 因此,使用此处理器作为参考,此数字会根据报告进行调整 测量
和
Per Day Max RateCPU Time 6.5 CPU-hours 15 CPU-minutes/minute
我想知道的事情:
此脚本是否超出限制?
(如果是)我如何才能超越限制?
我使用urllib库,我应该使用Google的URL Fetch API吗?为什么呢?
绝对是任何其他有用的评论。
它的作用:
它刮擦(爬行)项目免费电视。我只会完全运行它,然后用更短的更快的脚本替换它。
from urllib import urlopen
import re
alphaUrl = 'http://www.free-tv-video-online.me/movies/'
alphaPage = urlopen(alphaUrl).read()
patFinderAlpha = re.compile('<td width="97%" nowrap="true" class="mnlcategorylist"><a href="(.*)">')
findPatAlpha = re.findall(patFinderAlpha,alphaPage)
listIteratorAlpha = []
listIteratorAlpha[:] = range(len(findPatAlpha))
for ai in listIteratorAlpha:
betaUrl = 'http://www.free-tv-video-online.me/movies/' + findPatAlpha[ai] + '/'
betaPage = urlopen(betaUrl).read()
patFinderBeta = re.compile('<td width="97%" class="mnlcategorylist"><a href="(.*)">')
findPatBeta = re.findall(patFinderBeta,betaPage)
listIteratorBeta = []
listIteratorBeta[:] = range(len(findPatBeta))
for bi in listIteratorBeta:
gammaUrl = betaUrl + findPatBeta[bi]
gammaPage = urlopen(gammaUrl).read()
patFinderGamma = re.compile('<a href="(.*)" target="_blank" class="mnllinklist">')
findPatGamma = re.findall(patFinderGamma,gammaPage)
patFinderGamma2 = re.compile('<meta name="keywords"content="(.*)">')
findPatGamma2 = re.findall(patFinderGamma2,gammaPage)
listIteratorGamma = []
listIteratorGamma[:] = range(len(findPatGamma))
for gi in listIteratorGamma:
deltaUrl = findPatGamma[gi]
deltaPage = urlopen(deltaUrl).read()
patFinderDelta = re.compile("<iframe id='hmovie' .* src='(.*)' .*></iframe>")
findPatDelta = re.findall(patFinderDelta,deltaPage)
PutData( findPatGamma2[gi], findPatAlpha[ai], findPatDelt)
如果我忘了什么,请告诉我。
更新
这是关于它将运行多少次以及为什么这有助于回答这个问题。
per cycle total
Alpha: 1 1
Beta: 16 16
Gamma: ~250 ~4000
Delta: ~6 ~24000
答案 0 :(得分:2)
我不喜欢优化,直到我需要。首先,试试吧。它可能只是工作。如果你超过配额,耸肩,明天再来。
要将作业拆分为较小的部分,请查看Task Queue API。也许您可以将工作负载分成两个队列,一个用于擦除页面,另一个用于处理页面。您可以对队列设置限制,以控制它们的运行方式。
P.S。在HTML的正则表达式:做什么有效。学者们会在语义正确性上打电话给你,但如果它适合你,不要让那些阻止你。
答案 1 :(得分:1)
AppEngine生产服务器上的我使用urllib库,我应该使用Google的URL Fetch API吗?为什么呢?
答案 2 :(得分:0)
这不太可能超过免费限制,但如果不知道需要获取的URL列表有多大,以及生成的页面有多大,就不可能说出来。确切知道的唯一方法就是运行它 - 这样做真的没什么坏处。
您更有可能遇到单个请求执行的限制 - 前端请求为30秒,后续请求(如cron作业为10分钟) - 而不是超出配额。要解决这些问题,请使用Task Queue API将您的工作分成许多部分。作为额外的好处,它们可以并行运行!您可能还想查看Asynchronous URLFetch - 尽管如果这只是一次性脚本,它可能不值得。