Javascript 谷歌云功能、谷歌计算引擎和排队请求
我有一个启动计算引擎实例的云函数。但是,当触发多个函数时,在计算引擎上运行的先前操作会被传入的函数/命令中断。计算引擎正在运行pytorch实现。。。是否有一种方法可以将这些传入函数发送到队列,以便在关闭机器之前,在计算机引擎上运行的当前操作在接收下一个传入操作之前完成?任何概念性指导都将不胜感激 编辑 我的功能在存储桶更改时触发(上传)。在函数中,我启动一个GCE实例,并使用如下启动脚本自定义其启动行为(为简洁起见,简化了一些命令和目录):Javascript 谷歌云功能、谷歌计算引擎和排队请求,javascript,python,google-cloud-functions,google-compute-engine,Javascript,Python,Google Cloud Functions,Google Compute Engine,我有一个启动计算引擎实例的云函数。但是,当触发多个函数时,在计算引擎上运行的先前操作会被传入的函数/命令中断。计算引擎正在运行pytorch实现。。。是否有一种方法可以将这些传入函数发送到队列,以便在关闭机器之前,在计算机引擎上运行的当前操作在接收下一个传入操作之前完成?任何概念性指导都将不胜感激 编辑 我的功能在存储桶更改时触发(上传)。在函数中,我启动一个GCE实例,并使用如下启动脚本自定义其启动行为(为简洁起见,简化了一些命令和目录): 将多个批上载到云存储时会出现问题。每个新功能都将使用
将多个批上载到云存储时会出现问题。每个新功能都将使用新的启动脚本重新启动GCE实例,并开始处理新数据,保留以前的数据未完成。云任务确实满足您的要求,云任务允许您分离出可以在主应用程序流之外独立执行的工作,并使用您创建的处理程序异步发送它们以进行处理。如果您有更多关于将云任务调整到当前系统结构的问题,请告诉我 因为您的GCE实例是由云功能创建的。云任务可以通过其具有公共IP地址的HTTP端点调用云函数。因此,云任务是HTTP目标。您可以按照说明和示例代码进行操作
此外,GCP提供的教程完全相同,系统设计完全符合您当前的要求。云任务确实满足您的要求,云任务允许您分离出可以在主应用程序流之外独立执行的工作,并将其发送到异步处理,使用您创建的处理程序。如果您有更多关于将云任务调整到当前系统结构的问题,请告诉我 因为您的GCE实例是由云功能创建的。云任务可以通过其具有公共IP地址的HTTP端点调用云函数。因此,云任务是HTTP目标。您可以按照说明和示例代码进行操作
此外,GCP提供的教程完全相同,系统设计完全符合您当前的要求。确实满足您的要求,云任务允许您分离出可以在主应用程序流之外独立执行的工作,并将其发送到异步处理,使用您创建的处理程序。如果您有更多关于将云任务调整到当前系统结构的问题,请告诉我,您在计算引擎上做了多少次pytorch工作?@ShawnDiWu这听起来正是我需要的!该链接更多地讨论了将云任务与应用程序引擎而不是计算引擎集成,但如果我可以将其与计算引擎集成,那么我将继续使用它新创建的GCE实例是否具有相同的配置?有什么区别吗?实际上,云任务满足了您的需求,它允许您分离出可以在主应用程序流之外独立执行的工作,并使用您创建的处理程序将它们发送给异步处理。如果您有更多关于将云任务调整到当前系统结构的问题,请告诉我,您在计算引擎上做了多少次pytorch工作?@ShawnDiWu这听起来正是我需要的!该链接更多地讨论了将云任务与应用程序引擎而不是计算引擎集成,但如果我可以将其与计算引擎集成,那么我将继续使用它新创建的GCE实例是否具有相同的配置?有什么不同吗?云函数包含启动GCE的启动脚本。启动脚本中唯一的区别是实例运行后执行的程序上的标志。我将编辑我的问题以显示云功能。你能向我解释一下为什么你要实现bash来上传到GCS bucket吗?看起来你在这个功能中捆绑了很多任务,所以机器从一个GCS存储桶中提取文件,分析它们,然后输出到另一个存储桶。VM在使用时启动和停止,以避免产生额外的不必要成本,因此在VM启动时,必须重新初始化设置。我负责在启动时自动配置VM,在云函数中设置启动脚本似乎是实现这一点并在VM启动后传递python程序所需变量的最简单方法。我正在阅读文档,很难弄清楚如何创建一个队列来接收来自云函数的事件。另外,我不明白GCE在关闭之前将如何处理这些事件。云函数包含启动GCE的启动脚本。启动脚本中唯一的区别是实例运行后执行的程序上的标志。我将编辑我的问题以显示云功能。你能向我解释一下为什么你要实现bash来上传到GCS bucket吗?看起来你在这个功能中捆绑了很多任务,所以机器从一个GCS存储桶中提取文件,分析它们,然后输出到另一个存储桶。VM在使用时启动和停止,以避免产生额外的不必要成本,因此在VM启动时,必须重新初始化设置。我负责在启动时自动配置VM,在云函数中设置启动脚本似乎是实现这一点并在VM启动后传递python程序所需变量的最简单方法。我正在阅读文档,很难弄清楚如何创建一个队列来接收来自云函数的事件。而且,我不是
import os
from googleapiclient.discovery import build
def start(event, context):
file = event
print(file["id"])
string = file["id"]
newstring = string.split('/')
userId = newstring[1]
paymentId = newstring[2]
name = newstring[3]
print(name)
if name == "uploadcomplete.txt":
startup_script = """#! /bin/bash
cd ~ && pwd 1>>/var/log/log.out 2>&1
PATH=$PATH://usr/local/cuda 1>>/var/log/log.out 2>&1
cd program_directory 1>>/var/log/log.out 2>&1
source /opt/anaconda3/etc/profile.d/conda.sh 1>/var/log/log.out 2>&1
conda activate env
cd keras-retinanet/ 1>>/var/log/log.out 2>&1
export PYTHONPATH=`pwd` 1>>/var/log/log.out 2>&1
cd tracker 1>>/var/log/log.out 2>&1
python program_name --gcs_input_path gs://input/{userId}/{paymentId} --gcs_output_path gs://output/{userId}/{paymentId} 1>>/var/log/log.out 2>&1
sudo python3 gcs_to_mongo.py {userId} {paymentId} 1>>/var/log/log.out 2>&1
sudo shutdown -P now
""".format(userId=userId, paymentId=paymentId)
service = build('compute', 'v1', cache_discovery=False)
print('VM Instance starting')
project = 'XXXX'
zone = 'us-east1-c'
instance = 'YYYY'
metadata = service.instances().get(project=project, zone=zone, instance=instance)
metares = metadata.execute()
print(metares)
fingerprint = metares["metadata"]["fingerprint"]
print(fingerprint)
bodydata = {"fingerprint": fingerprint,
"items": [{"key": "startup-script", "value": startup_script}]}
print(bodydata)
meta = service.instances().setMetadata(project=project, zone=zone, instance=instance,
body=bodydata)
res = meta.execute()
instanceget = service.instances().get(project=project, zone=zone, instance=instance).execute()
request = service.instances().start(project=project, zone=zone, instance=instance)
response = request.execute()
print('VM Instance started')
print(instanceget)
print("'New Metadata:", instanceget['metadata'])