我正在尝试在后台任务中创建多个Google文档。
我尝试使用taskqueue
中的Google App Engine
但我不能理解这一点,因为我不断收到此消息:
INFO 2016-05-17 15:38:46,393 module.py:787] default: "POST /update_docs HTTP/1.1" 302 -
WARNING 2016-05-17 15:38:46,393 taskqueue_stub.py:1981] Task task1 failed to execute. This task will retry in 0.800 seconds
这是我的代码。我多次调用需要从队列中执行的方法UpdateDocs
。
# Create a GDoc in the queue (called by her)
class UpdateDocs(BaseHandler):
@decorator.oauth_required
def post(self):
try:
http = decorator.http()
service = discovery.build("drive", "v2", http=http)
# Create the file
docs_name = self.request.get('docs_name')
body = {
'mimeType': DOCS_MIMETYPE,
'title': docs_name,
}
service.files().insert(body=body).execute()
except AccessTokenRefreshError:
self.redirect("/")
# Create multiple GDocs by calling the queue
class QueueMultiDocsCreator(BaseHandler):
def get(self):
try:
for i in range(5):
name = "File_n" + str(i)
taskqueue.add(
url='/update_docs',
params={
'docs_name': name,
})
self.redirect('/files')
except AccessTokenRefreshError:
self.redirect('/')
我可以在App Engine控制台中看到推送队列,并且每个任务都在其中但是它们无法运行,我不明白为什么。
答案 0 :(得分:-1)
请尝试在代码中指定worker
模块。
如Creating a new task所示,在调用taskqueue.add()
函数后,它会以名为worker
的模块为目标,并通过设置url / update-counter来调用其处理程序。
class EnqueueTaskHandler(webapp2.RequestHandler):
def post(self):
amount = int(self.request.get('amount'))
task = taskqueue.add(
url='/update_counter',
target='worker',
params={'amount': amount})
self.response.write(
'Task {} enqueued, ETA {}.'.format(task.name, task.eta))
从我在blog中读到的内容来看,worker
是任务队列中的一个重要部分。它是一个python进程,从队列中读取作业并一次执行一个。
我希望有所帮助。