发布于2019-09-06 11:56 阅读(1374) 评论(0) 点赞(13) 收藏(0)
起因:想玩一下微信公众号,于是到新浪云搭了SAE。根据网上大牛们的博客,实现了根据消息被动回复功能,于是想进一步实现一些其他的功能,比如说每天定时从我们学校的网站爬取一些新闻存到数据库,然后根据用户的信息来推送。
解决思路:现在本地写好了爬虫脚本,没遇到什么大问题。于是决定将它放到新浪云上看能不能定时的跑起来。查看了新浪SAE的开发者文档,对于定时任务的概述,它是这样写的:
“定时任务服务可以用来定期触发您的应用执行一些后台任务,像定期清理和备份 MySQL 表中的数据、发送邮件通知等。定时任务的执行以 HTTP 方式触发,触发后真正执行的是您在应用中定义的 HTTP 回调函数。
对于配置定时任务的说明如下:
“您也可以在应用的配置文件 config.yaml 中添加任务。任务的执行状态可在定时任务的 Web 管理页面看到。
编辑 config.yaml 文件,增加 cron 段,例如:
cron:
- description: cron_test
url: /cron/make
schedule: "*/5 * * * *"
上面的示例添加了一个定时任务,该任务每 5 分钟调用 http:// 应用名.sinaapp.com/cron/make 一次。”
初次接触web.py,对于前端的认识也不是很全面,我暂且把“应用”理解为某一个页面下能执行某段任务的代码,于是为了搞清楚定时任务是如何工作的,我决定尝试一下在定时任务里清空数据库里的一张表。我是这样写的:
我新建了一个updateDaily.py,里面包含了一个UpdateDB类,用来清空数据库的某张表:
# -*- coding: utf-8 -*-
import os
from connectDB import connectMYSQL
import web
class updateDB:
def __init__(self):
self.query = connectMYSQL()
self.app_root = os.path.dirname(__file__)
self.templates_root = os.path.join(self.app_root, 'templates')
self.render = web.template.render(self.templates_root)
def GET(self):
sql = "truncate table board_data;"
self.query.execute(sql)
return "hello world"
之后,我在index.wsgi中调用以上编写的模块,并且增加一个url,具体代码如下:
# -*- coding: utf-8 -*-
import os
import sae
import web
from connectToWechat import WechatInterface
from updateDaily import updateDB
urls = ('/weixin', 'WechatInterface', '/update', 'updateDB',)
app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)
app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)
最后,修改配置表config.yaml,增加以下代码:
cron:
- url: /update
schedule: "0 4 * * *"
description: "每天凌晨四点执行一次"
最后上传代码,可以看到新浪云SAE的定时任务页面已经有了我所配置的任务,但是每一次的执行结果都是返回404,然后数据库中的表并没有被清空。 定时任务的页面如下:
而定时任务的日志记录如下:
“[ 2016-11-07 04:00:16 ] status="404 Not Found" url="/update" response="not found" yq124”
检查了很多遍,调试了很多次,都没有发现问题在哪里,求各位大牛指点一下迷津啊。
提问:既然在定时任务的页面上可以看到我配置的定时任务,说明定时任务的配置是没问题的,再看到Index.wsgi里的URL,我只实现了两个功能,一个是在/weixin路径下实现微信公众号接口的token认真,这是没问题的,另外一个/update路径下实现的定时任务功能,但是触发这个页面的时候返回的是404,这让我百思不得其解,因为我在本地测试过,这种写法是可以返回"hello world"的,但是怎么到了新浪云上就失效了呢?跪求各位大牛指点迷津啊。
最后吐槽一下新浪云真的好贵,一天扣我几十豆,我被上面这个问题卡了好久了,实在不忍心看我的豆一直减却什么东西都没做
作者:goodbody
链接:https://www.pythonheidong.com/blog/article/98173/a4ec24150cf05d61f8b9/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!