在googleappengin上同时推迟多个任务

2024-04-19 11:04:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在googleappengine上开发一个python应用程序。我有一个CRON工作,每天从一个S3 bucket向一个GS bucket导入一个包含20个新文件的列表。你知道吗

这是我的密码:

import webapp2
import yaml
from google.appengine.ext import deferred

class CronTask(webapp2.RequestHandler):

    def get(self):
        with open('/my/config/file') as file:
            config_dict = yaml.load(file_config_file)
        for file_to_load in config_dict:
            deferred.defer(my_import_function, file_to_load)


app = webapp2.WSGIApplication([
    ('/', CronTask)
], debug=True)

注意,my_import_function是另一个包的一部分,需要一些时间来完成。你知道吗

我的问题是:在这个任务中使用函数deferred.defer是一个好主意,还是我应该为所有参数分别启动my_import_function?你知道吗


Tags: toimportconfigyamlbucketmyloadfunction
1条回答
网友
1楼 · 发布于 2024-04-19 11:04:01

您应该使用taskqueue,但是根据您有多少任务,您可能不想使用deferred.defer()。你知道吗

使用deferred.defer(),每次调用只能将一个任务排队。如果你在排队处理很多任务,那真的是效率低下。这真的很慢:

for x in some_list:
    deferred.defer(my_task, x)

有了大量的任务,这样做会更有效率:

task_list = []
for x in some_list:
    task_list.append(taskqueue.Task(url="/task-url",params=dict(x=x)))
taskqueue.Queue().add(task_list)

大约一年前,我做了一个时间比较,后者至少比前者快一个数量级。你知道吗

相关问题 更多 >