0

我使用 Google Task Queue Python API 编写了我的第一个代码。每次在地址栏中输入 URL 时,它应该发送一封电子邮件。虽然它default在我的仪表板的任务队列中显示了一个任务,但我不知道为什么即使在启动一个小时后它也没有执行。

队列邮件.py:-

class sendMail(webapp.RequestHandler):
    def post(self):
        mail.send_mail(
            'X@gmail.com',
        self.request.get('to'),
        self.request.get('subject'),
        self.request.get('body'))


taskqueue.add(url='/sendMail',params=dict(
    to='Y@hotmail.com',
subject = 'Testing task queues',
body = 'this is a message!'))

app.yaml:-

handlers:
 - url: /mail
   script: queue-mail.py

我将代码调用为:appid.appspot.com/mail

4

3 回答 3

3

请阅读文档中有关如何使用 webapp 框架的部分。您已经定义了一个处理程序类,但是您还没有为它定义一个 WSGI 应用程序,或者在您的脚本中调用它。结果,您的处理程序代码将永远不会运行。

由于您已将代码放入模块级别将任务排入队列,并且尚未定义main()函数,因此每次向模块发送请求时,它都会执行该代码 - 所以您的所有代码所做的就是将相同的任务排入队列,一遍又一遍,实际上没有做任何事情。您需要将用于将任务入队的代码与执行任务的代码分开,并将入队代码放在您从不同 URL 调用的另一个处理程序中。

于 2011-07-29T00:33:08.957 回答
1

看到你的问题解决了,我想我会发布一个官方答案。 post工作而get没有工作,因为这是任务队列的默认方法。如果您查看函数文档,其中一个 kwargs 是方法,您可以在其中指定 get/post/etc,但由于您没有在代码中,它默认为 post。附带说明一下,您可能没有看到 404 表示缺少处理程序,而是 405 表示“方法不允许”(因为任务队列试图将发布请求发送到没有发布功能的处理程序定义)

于 2011-07-30T14:20:43.683 回答
0

我认为send_mail将任务发送到邮件服务,该服务将发送电子邮件的任务排队。因此我不确定是否taskqueue.add()会比send_mail(). (假设您的电子邮件任务不执行任何 RPC 调用等)。

于 2014-05-27T22:42:15.033 回答