今天写代码,又要写TaskQueue了,这回想玩一把自定义queue,折腾了一会,才弄明白,小结一下。
一,要明白Task跟Queue这两个概念。
1、如果在根目录下没有queue.yaml的话,GAE默认只有1个Task Queue,名字叫default。要增加自定义Qeue的话,可以在queue.yaml里自定义,并在代码里创建。
2、1个Queue里可以有很多Task。
GAE默认有1个Queue,Task可通过如下方式添加到默认queue,一般会这个就够用了,不用往下看了。
1
2
3
4 from google.appengine.api.labs import taskqueue
taskurl = ‘http://example.appspot.com/news/2009/'
taskqueue.add( url=’/taskjob/sendmail/’, params=dict(url=taskurl))
3、task也是有名字的,如果不指定,系统会自动分配一个。
注意:task的名字是不能重复的,否则就会只有第一个task能成功添加到queque里。
下面是一个出错的例子:
1
2
3 for loop in range(0,100):
taskurl = ‘http://example.appspot.com/news/%d/' % (loop)
taskqueue.add( url=’/taskjob/yourjob/’,name = ‘mytask’, params=dict(url=taskurl))
出现的Exception提示会是:
Exception Type: TombstonedTaskError Exception Value: Exception Location: /base/python_lib/versions/1/google/appengine/api/labs/taskqueue/taskqueue.py in __TranslateError, line 619 Python Executable: /base/
二、自定义QUEUE
1、先在queue.yaml自定义,例如定义一个名字叫yobinqueue的,这么写。具体可参考GAE文档。
queue:
- name: yobinqueue
rate: 10/m
bucket_size: 10
2、在代码里可以这么写(没有搜到现成的例子,参考GAE文档写的,测试成功):
from google.appengine.api.labs import taskqueue
1
2
3
4
5 for loop in range(0,10):
taskurl = ‘http://example.appspot.com/news/%d/' % (loop)
pqueue = taskqueue.Queue(name=‘yobinqueue’)
ptask = taskqueue.Task(url=’/taskjob/example/’,params=dict(url=taskurl))
pqueue.add(ptask)
3、urls.py里,当然要映射一下task的url。
4、其他:有不懂的,参考一下GAE的在线文档,琢磨一下总能试出来的。
再写写GAE的TaskQueue
再写写GAE的TaskQueue
...