如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?

Posted

技术标签:

【中文标题】如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?【英文标题】:How to call a global variable from a pubsub callback function in google-cloud-platform vminstance? 【发布时间】:2019-03-27 09:15:24 【问题描述】:

我正在运行一个神经网络模型,该模型应该在每次触发 pubsub 事件时异步地在回调函数中运行。我在主程序初始化期间将模型加载为全局变量,以便它可以在任何函数中访问,并避免每次在回调函数本身中加载模型。 典型代码可以是:

global cv_model
cv_model = load_model('my_model.h5')

def callback():
    prediction = cv_model.predict(image)

此方法在我的本地机器上完美运行。但是当我尝试使用 pubsub 事件回调时,我遇到了一些错误。经过一番搜索,我发现“pubsub 是主程序的子进程,我们不能在进程之间共享全局变量”。我尝试了嵌套函数方法和 OOP 方法,但都没有奏效。

如何避免每次调用回调函数时加载模型? 有什么替代方法可以解决这个冲突吗?

谢谢你的建议!!

【问题讨论】:

【参考方案1】:

如果您无法通过 Pub/Sub 回调实现这一点,您可以尝试编写一个 Google Cloud Function with a Pub/Sub Trigger 来代替,它不存在此问题:

from keras.models import load_model
cv_model = load_model('my_model.h5')

def handle_pubsub(data, context):
    image = ...  # do something with the `data` arg here
    prediction = cv_model.predict(image)

【讨论】:

在 G-cloud-function 中加载巨大的模型是个好主意吗?与VM相比成本如何?云功能最大内存限制为2GB,不够用。

以上是关于如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何从其他面板从 JTextField 获取输入

如何从外部从 GitHub 加载 JavaScript 文件? [复制]

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个