jim*_*jim 2 python google-app-engine timeout deadlines quota
我的脚本抓取rss页面的内容获取该页面中的URL将它们保存到列表然后它抓取每个URL的内容,并将页面内容通过电子邮件发送给我.一切都很好,接受我不能发送列表中的每个链接.通常在列表中有大约22个链接.我不想将多个链接的内容合并到一封电子邮件中.如果我没有添加超时,我会收到这样的超额配额错误
<class 'google.appengine.runtime.apiproxy_errors.OverQuotaError'>: The API call mail.Send() required more quota than is available.
Run Code Online (Sandbox Code Playgroud)
在我添加"time.sleep(9)"以减慢它后,它给了我这个错误.
<class 'google.appengine.runtime.DeadlineExceededError'>:
Traceback (most recent call last):
Run Code Online (Sandbox Code Playgroud)
这是我的代码..有什么想法吗?
size = len(my_tabletest)
a=2
while a < size:
url = my_tabletest[a].split('html</link>')[0] + "print"
url_hhhhhh = urlfetch.fetch(url)
my_story = url_hhhhhh.content
my_story = my_story.split('<div class="printstory">')[1]
my_story_subject = my_story.split('<h1>')[1]
my_story_subject = my_story_subject.split('</h1>')[0]
my_story = ''.join(BeautifulSoup(my_story).findAll(text=True))
message = mail.EmailMessage(sender="me<me@someplace.com>",
subject=my_story_subject)
message.to = "Jim <me@someplace.com>"
message.body = my_story
message.html = my_story_html
message.send()
time.sleep(9)
a=a+1
Run Code Online (Sandbox Code Playgroud)
欢迎来到Stack Overflow!
该任务队列是建立来解决这个问题.您可以使用延迟库对现有代码进行最小的更改来利用它:
而不是打电话message.send(),做这样的事情:
def send_email(message):
message.send()
deferred.defer(send_email, message)
Run Code Online (Sandbox Code Playgroud)
这将创建一批临时任务,在您的主请求处理程序返回后,在后台发送您的电子邮件.当您的应用程序达到出站邮件的短期配额限制时,其中一些任务可能会在第一次尝试时失败.没关系; 失败的任务将退回并自动重试,直到它们成功.
编辑:哦,并sleep从你的代码中取出.=)
编辑#2:您可以通过将urlfetch移动到任务中来进一步加快速度,因此每个任务都会获取一个URL,然后发送一封电子邮件.在一个请求处理程序中获取22个URL可能足以导致超时,而不依赖于发送邮件.
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |