想要测试简单任务添加到队列 我有这个脚本。
import os, sys
test_directory = os.path.dirname(os.path.abspath(__file__))
paths = [
'/../../google_appengine',
]
for path in paths:
sys.path.insert(0, os.path.abspath(test_directory + path))
from google.appengine.api import taskqueue
QUEUE_NAME = 'default'
import os
import unittest
from google.appengine.api import taskqueue
from google.appengine.ext import testbed
class TaskQueueTestCase(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
# root_path must be set the the location of queue.yaml.
# Otherwise, only the 'default' queue will be available.
self.testbed.init_taskqueue_stub(
root_path=os.path.join(os.path.dirname(__file__), 'resources'))
self.taskqueue_stub = self.testbed.get_stub(
testbed.TASKQUEUE_SERVICE_NAME)
def tearDown(self):
self.testbed.deactivate()
def testTaskAddedToQueue(self):
taskqueue.Task(name='my_task', url='/url/of/my/task/').add(QUEUE_NAME)
tasks = self.taskqueue_stub.get_filtered_tasks(QUEUE_NAME)
assert len(tasks) == 1
assert tasks[0].name == 'my_task'
aaa = TaskQueueTestCase('setUp')
aaa()
aaa.testTaskAddedToQueue()
如果试图运行
taskqueue.Task(name='my_task', url='/url/of/my/task/').add(QUEUE_NAME)
获取TaskAlreadyExistsError
但是在尝试计算得到0的任务数时
self.taskqueue_stub.get_filtered_tasks(QUEUE_NAME) # getting [] here
也尝试了
q = taskqueue.Queue('slowQueue')
task = taskqueue.Task(url='/worker/slow', params={'name': 'myname'})
q.add(task)
获取UnknownQueueError
我使用
运行了本地服务器 dev_appserver.py -A asdfasdf worker.yaml
INFO 2016-10-05 11:00:47,730 devappserver2.py:769] Skipping SDK update check.
INFO 2016-10-05 11:00:47,819 api_server.py:205] Starting API server at: http://localhost:62568
INFO 2016-10-05 11:00:47,822 dispatcher.py:197] Starting module "worker" running at: http://localhost:8080
INFO 2016-10-05 11:00:47,825 admin_server.py:116] Starting admin server at: http://localhost:8000
WARNING 2016-10-05 11:00:47,825 devappserver2.py:835] No default module found. Ignoring.
这是worker.yaml
queue:
- name: ohad
bucket_size: 1
rate: 1/s
如何在我的代码中定义将消息推送到localhost服务器?
应用程序,引擎和推送队列的新功能。 请帮忙。
答案 0 :(得分:2)
来自Naming a task(强调我的):
任务名称在队列中必须是唯一的。如果您尝试将另一个具有相同名称的任务添加到队列,则操作将失败。后 从队列中删除任务,您无法插入任务 在10天过后,将其命名为队列。任务名称即可 包含大写和小写字母,数字,下划线和 连字符。任务名称的最大长度为500个字符。
您有两个选择:
确保您分配的任务名称是唯一的 - 例如(假设基于时间戳的名称确实是唯一的):
def testTaskAddedToQueue(self):
import time
task_name = 'my_task_%d' % int(time.time() * 100000)
taskqueue.Task(name=task_name, url='/url/of/my/task/').add(QUEUE_NAME)
tasks = self.taskqueue_stub.get_filtered_tasks(QUEUE_NAME)
assert len(tasks) == 1
assert tasks[0].name == task_name
保留GAE自动分配任务名称(保证唯一 - 基于已排队任务的数量)并从创建的任务中获取名称(而不是声明名称与指定的名称匹配)。例如:
def testTaskAddedToQueue(self):
task = taskqueue.Task(url='/url/of/my/task/')
task.add(QUEUE_NAME)
tasks = self.taskqueue_stub.get_filtered_tasks(QUEUE_NAME)
assert len(tasks) == 1
assert tasks[0].name == task.name
命名冲突阻止将任务添加到队列中,这就是len(tasks)
0
和.get_filtered_tasks()
返回[]
的原因。