Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Google应用程序引擎发送电子邮件超时_Python_Google App Engine_Timeout_Quota_Deadlines - Fatal编程技术网

Python Google应用程序引擎发送电子邮件超时

Python Google应用程序引擎发送电子邮件超时,python,google-app-engine,timeout,quota,deadlines,Python,Google App Engine,Timeout,Quota,Deadlines,我的脚本获取rss页面的内容获取该页面中的url并将其保存到列表中,然后它获取每个url的内容并通过电子邮件将页面内容发送给我。一切都很好,接受我不能发送列表中的每个链接。通常列表中有22个链接。我不想将多个链接的内容合并到一封电子邮件中。如果我不加一个超时,我会得到一个像这样的超配额错误 <class 'google.appengine.runtime.apiproxy_errors.OverQuotaError'>: The API call mail.Send() requir

我的脚本获取rss页面的内容获取该页面中的url并将其保存到列表中,然后它获取每个url的内容并通过电子邮件将页面内容发送给我。一切都很好,接受我不能发送列表中的每个链接。通常列表中有22个链接。我不想将多个链接的内容合并到一封电子邮件中。如果我不加一个超时,我会得到一个像这样的超配额错误

<class 'google.appengine.runtime.apiproxy_errors.OverQuotaError'>: The API call mail.Send() required more quota than is available. 
:API调用mail.Send()所需的配额超过了可用配额。
在我添加了“time.sleep(9)”来降低速度之后,它给了我这个错误

<class 'google.appengine.runtime.DeadlineExceededError'>: 
Traceback (most recent call last):
:
回溯(最近一次呼叫最后一次):
这是我的密码。。有什么想法吗

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
size=len(我的表格测试)
a=2
而a<尺寸:
url=my_tabletest[a]。拆分('html')[0]+“打印”
url_hhhh=urlfetch.fetch(url)
my_story=url_hhhh.content
my_story=my_story.split(“”)[1]
我的故事主题=我的故事分割(“”)[1]
我的故事主题=我的故事主题。拆分(“”)[0]
my_story=''.join(beautifulsou(my_story.findAll)(text=True))
message=mail.EmailMessage(sender=“me”,
主题=我的故事(主题)
message.to=“吉姆”
message.body=我的故事
message.html=我的故事
message.send()
时间。睡眠(9)
a=a+1

欢迎来到堆栈溢出

该系统就是为了解决这个问题而建立的。您可以利用它,对现有代码进行最小的更改,方法是:

不要调用
message.send()
,而是执行以下操作:

def send_email(message):  
  message.send()

deferred.defer(send_email, message)
这将创建一批临时任务,在主请求处理程序返回后在后台发送电子邮件。其中一些任务可能会在第一次尝试时失败,因为您的应用程序会达到出站邮件的短期配额限制。没关系;失败的任务将退出并自动重试,直到成功

编辑:哦,从代码中去掉
睡眠


编辑#2:您可以通过将urlfetch移动到任务中来进一步加快速度,这样每个任务都会获取一个URL,然后发送一封电子邮件。在一个请求处理程序中获取22个URL可能足以导致超时,这与发送邮件无关。

您可能遇到了问题。我想Tasks API可能是一种解决方法,但我以前从未使用过。另一方面,如果您正在进行大量的手动RSS解析,请考虑使用。您也可以只做<代码>推迟。推迟(消息发送)< />代码。