首页 > 解决方案 > 如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?

问题描述

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

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

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

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

每次调用回调函数时如何避免模型加载?解决此冲突的任何替代方法?

感谢您的建议!

标签: python-3.xkerasgoogle-cloud-platformgoogle-cloud-pubsub

解决方案


如果您无法通过 Pub/Sub 回调实现此目的,您可以尝试使用 Pub/Sub 触发器编写 Google Cloud 函数,它不存在此问题:

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)

推荐阅读