我在代码中看到很多我开始运行:
This request caused a new process to be started for your application, and thus
caused your application code to be loaded for the first time. This request may
thus take longer and use more CPU than a typical request for your application.
据我所知,GAE是一个云平台,可以在需要时自动生成实例,但我不了解这里幕后发生的事情。
它是否这样做是因为这是我第一次运行代码所以它已经"测试"这要花多长时间?这有点令人沮丧,因为,例如,我正在下载包含大量文件的大型zip文件。我想加载那个大型zip存档,然后将每个文件解析为一个任务队列,以便单独处理。我已正确设置该部分,但无论出于何种原因,它会为我的代码加载zip文件生成一个新进程,因此它将为每个文件重复启动任务队列。
这是第一次运行后应该消失的东西吗?我正在分配足够多的RAM / CPU来完成工作,所以我无法想象它会在那里遇到限制。或者我是否需要在代码中添加一些内容以检查zip文件是否已加载并关闭GAE加载的其他进程?如果我知道我只想让这个过程每天运行一次(它基本上是一个cron作业),我应该在module.yaml
文件上使用手动缩放吗?
感谢。
编辑:添加有关代码正在执行的操作的更多信息
代码实际上相对简单(我认为这仅仅是因为zip文件非常庞大并且其中包含数千个XML文件):
bucket = '/dbdumps'
filename = bucket + '/dbdump_'+datetime.datetime.today().strftime('%Y-%m-%d')+'.zip'
gcs_file = gcs.open(filename,'r')
gcs_stats = gcs.stat(filename)
gcs_fileMem = StringIO.StringIO(gcs_file.read())
zip_file = zipfile.ZipFile(gcs_fileMem, 'r')
gcs_file.close()
filelist = zip_file.namelist() # list of files -- stored in memory
for tmpfile in filelist:
taskqueue.add(queue_name='loader',target='loadandprocessfileworker',url='/tasks/loadFileWorker',params = {'fileID':str(tmpFile)[:-4],'fileXML':str(tmpFile),'date':datetime.datetime.today().strftime('%Y-%m-%d')})
只是在我的module.yaml文件中使用manual_scaling
解决了这个问题(只要我在完成后添加代码来降低实例)? Function关闭此版本的所有实例(上述作业是此模块上唯一的脚本,因此将所有实例分解为正常)