2011-04-19 77 views
0

我是新来的网络应用程序,所以我不太习惯担心CPU的限制,但我看起来我会有这个代码的问题。我在谷歌的配额页面阅读,我可以使用6.5 CPU每小时15个CPU,分钟每分钟。如何让此代码在Google应用引擎上顺利运行?

谷歌表示:

CPU时间被报告在“秒”,这等效于 可以由1.2 GHz的英特尔x86处理器中的时间量来执行的CPU周期的数目。实际使用的CPU周期数 根据App Engine内部条件 的变化很大,因此为了报告目的而使用此处理器作为参考 度量值来调整此数字。

而且

   Per Day   Max Rate
CPU Time 6.5 CPU-hours 15 CPU-minutes/minute

什么我想知道:

是这个脚本会超过这个限制?

(如果是的话)我怎样才能使它不超过极限?

我使用urllib库,我应该使用Google的URL抓取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
+2

@Jon用正则表达式解析HTML在Stack Overflow中是一个罪过。 – systempuntoout 2011-04-19 08:22:28

+0

这些不是“限制”,它们是你免费获得的。如果你想运行任何使用重要CPU的东西,你将不得不为你的应用程序支付,与其他主机一样。 – geoffspear 2011-04-19 11:26:56

+0

@systempuntoout糟糕,应该怎么做? – 2011-04-19 14:12:28

回答

2

我不喜欢优化,直到我需要。首先,试试吧。它可能只是工作。如果你超过配额,耸耸肩,明天再来。

要将作业拆分成较小的零件,请查看Task Queue API。也许你可以将工作负载分成两个队列,一个是页面,另一个是处理页面。您可以对队列设置限制来控制它们的运行方式。

P.S.在HTML的正则表达式:做什么工作。学者们会以语义上的正确性来打电话给你,但如果它适合你,不要让它阻止你。

1

我使用的urllib库,我应该使用谷歌的网址提取API?为什么?

urlib AppEngine上生产服务器的网址提取API

+0

好吧,有一半的问题,你有什么想法(如果我确实需要)我可以将它分成几部分,因此它保持在自由限制内。 – 2011-04-19 14:17:30

+0

不,它是URLFetch API的包装器。 – 2011-04-21 03:19:13

0

这不太可能会超过免费限制,但不可能说如果没有看到它需要获取的URL列表有多大,以及得到的页面有多大。唯一确定的方法就是运行它 - 这样做确实没有什么坏处。

您更可能遇到个别请求执行的限制 - 前端请求执行30秒,后端请求执行10分钟 - 例如cron作业 - 超出配额限制。为了缓解这些问题,请使用Task Queue API将作业分成许多部分。作为额外的好处,他们可以并行运行!你可能也想看看Asynchronous URLFetch - 尽管如果这只是一次性脚本,它可能不值得。