使用任务队列创建多个Google文档

时间:2016-05-17 15:48:23

标签: python google-app-engine google-drive-api task-queue

我正在尝试在后台任务中创建多个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控制台中看到推送队列,并且每个任务都在其中但是它们无法运行,我不明白为什么。

1 个答案:

答案 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进程,从队列中读取作业并一次执行一个。

我希望有所帮助。