2014年1月22日 星期三 晴
本文列举一下我用SAE(Python)Cron和Taskqueue的使用的实例,本文举例用的是Tornador。
Cron的用法:
具体可以参考SAE官方的说明和例子
http://sae.sina.com.cn/?m=devcenter&catId=195
http://sae.sina.com.cn/?m=devcenter&catId=291#anchor_1f38fc1f04ff828da2112cbe0ea45887
步骤1:修改config.yaml,如下,其中schedule是和linux cronjob一个写法。 config.yaml cron: - description: cron_rate_add url: cronjob/ schedule: every 1 mins timezone: Beijing 步骤2:url映射 urls = [ (r"/cronjob/", Mycronjob), ] 步骤3: 下面只是示例,表达出示例的意思就行,用Django或者其他框架也差不多。 class Mycronjob(MyHandler): # Cron使用GET方式请求URL def post(self): 。。。。。。 #具体可以试试,到底是走get还是post,两个部分都写,打印Log出来看看 def get(self): 。。。。。。
TaskQueue的用法:
还是要先看看官方的说明: http://sae.sina.com.cn/?m=devcenter&catId=205 http://sae.sina.com.cn/?m=devcenter&catId=291#anchor_50e2d0bd387f00d674abd097611d2a3a 步骤1: 去SAE后台创建TaskQueue队列,珍惜资源,所有APP加起来只能使用一共10个Taskqueque。 Taskqueque分顺序队列和并发队列。我的习惯是,重要的不能出错的,就顺序队列一个个执行,队列等级为0,比如我要记录哪些用户注册了。无关紧要的用并发队列,等级为6。 创建一个队列,可以在多种场景共用的,用的时候参数不同。 步骤2: 下面是在CronJob示范Taskqueque的例子,我只喜欢用add_task这种用法。 from sae.taskqueue import Task, TaskQueue,add_task class Mycronjob(MyHandler): #下面这个是cronjob到点了,添加20个taskqueue的例子 def post(self): for loop in xrange(20): add_task('pqueue6', '/task/test',"uid=%s" % (str(uid))) 步骤3:添加taskqueue的url映射。 urls = [ (r"/cronjob/", Mycronjob), (r"/task/test", TaskJob), ] 步骤4:taskqueue的处理,这里由于有Payload,所以只处理post提交的。 class TaskJob(TbHandler): def post(self): uid = self.get_argument("uid",None) #走get还是post,如果真的吃不准的话,都写,然后打Log看就明白了。 def get(self): uid = self.get_argument("uid",None)
一些注意事项:
-
TaskQueue的任务的最长时间不得超过30秒(用url抓网页的注意了,别在一个url执行太多东西)
-
所有APP创建TaskQueue总数<=10
-
任务的url现在已经改为相对的url,目前兼容绝对url,但是不推荐使用。 任务默认使用GET方式请求,如果Task带有payload参数且不为None则使用POST方式请求。
-
Cron的任务执行因为是以HTTP方式(GET),所以运行时间有上限,不得超过300秒;如果用户有超过300秒的任务需要定时触发,可以将其分解成多个cron,或者将任务放入TaskQueue或者DeferredJob来异步的执行。
-
Cron不分App版本,只对默认版本生效,当切换代码默认版本时cron会重新配置,切换成当前默认版本下的cron配置。
其他注意事项看文档吧。
...