Как вызвать глобальную переменную из функции обратного вызова pubsub в gmin-cloud-platform vminstance? - PullRequest
0 голосов
/ 23 октября 2018

Я использую модель нейронной сети, которая должна запускаться в функции обратного вызова каждый раз асинхронно при запуске события pubsub.Я загрузил модель как глобальную переменную во время инициализации основной программы, чтобы она могла обращаться к любой функции и избегать загрузки модели каждый раз в самой функции обратного вызова.Типичный код может быть:

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

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

Этот метод отлично работает на моей локальной машине.Но когда я пытался перезвонить с помощью pubsub, я получаю некоторые ошибки.После некоторого поиска я понял, что «pubsub - это дочерний процесс основной программы, и мы не можем делить глобальные переменные между процессами».Я попробовал подход с вложенными функциями и подход ООП, но ни один из них не сработал.

Как можно избежать загрузки модели каждый раз, когда вызывается функция обратного вызова?Какие-нибудь альтернативные способы разрешить этот конфликт?

Спасибо за предложения !!

1 Ответ

0 голосов
/ 23 октября 2018

Если вы не можете добиться этого с помощью обратного вызова Pub / Sub, вы можете вместо этого попробовать написать Облачная функция Google с триггером Pub / Sub , у которой нет этой проблемы:

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)
...