python-3.x - 如何从 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 方法,但都没有奏效。
每次调用回调函数时如何避免模型加载?解决此冲突的任何替代方法?
感谢您的建议!
解决方案
如果您无法通过 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)
推荐阅读
- sql - SSIS条件拆分错误输出未将任何数据写入表
- java - Intellij 无法识别 docker maven 依赖项
- gdb - gdb - 调用“完成”时禁用返回值的打印
- html - 如何编写一个 html 代码来显示谷歌地图
- python - 我的 while 验证循环不接受有效答案并中断,自动移动到 else 语句
- docker - 具有现有架构的 docker 上的 SOLR Cloud 设置
- spring - 多redis连接问题
- java - 在 Visual Studio 2017(或 2019)中,有没有办法让 Java 应用程序导致 Visual Studio 调试器附加到应用程序的进程
- github - 如何在分支中本地访问 git 代码?
- r - 将数据帧列表转换为时间序列列表