gpt4 book ai didi

python - 未在 Python 中正确调用 Google Cloud PubSub

转载 作者:太空宇宙 更新时间:2023-11-04 00:12:19 24 4
gpt4 key购买 nike

我绞尽脑汁,但我不明白为什么会出现这个问题,我也无法找出原因。我正在尝试读取图像并将其传递给 pubsub。一旦消息通过 pubsub 发送,它就会被重定向到 AutoML 模型以识别或预测给定的图像。下面是代码片段

global val1   
@app.route("/", methods=['GET', 'POST'])
doc_type=request.form.get('submit_button')
file_name = secure_filename(file.filename)
blob=file.read()
flash('File upload successful', 'info')
# Initializing PubSub
publisher,subscriber,topic,subscription=pubsub_init(doc_type)
blob=blob+bytes(doc_type,'utf-8')
subscriber.subscribe(subscription,callback)
publisher.publish(topic,blob)
flash("the uploaded file is "+val1,'info')

初始化函数:

def pubsub_init(doctype):
publisher=pubsub.PublisherClient()
subscriber=pubsub.SubscriberClient()
if doctype=="License":
subscription=<<sub name>>
elif doctype=="Credit":
subscription=<<subname>>
elif doctype=="Passport":
subscription=<<subname>>
else:
print("invalid choice"
topic=<<topic>>
print(subscription)
return (publisher,subscriber,topic,subscription)

我的回调:

def callback(message):
#print("hello",flush=True)
print("making global")
project_id=<<proj id>>
val1,val2=predict_value(new_message,model_id,project_id,compute_region)
message.ack()

但是我收到类似 val1 not defined 的错误。您能就此提出建议吗?

最佳答案

这里的问题是 subscriber.subscribe(subscription, callback) 正在设置对 callback 的异步调用。

这意味着当您发布一个新主题时,您实质上是在先执行调用 flash(...) 还是先执行回调之间设置竞争条件。由于回调可能需要一些时间才能完成,因此 flash 行获胜,但 val1 尚未创建,因此您的错误。

There are ways to control the concurrency这可能会阻止订阅者的 future ,从而使您尝试做的事情成为可能。

但是在尝试之前,我想问一下您为什么首先要在这里尝试使用 pub/sub。看起来您只是在设置发布者和订阅者来发布单个消息,然后尝试对该消息的结果执行某些操作。为什么不全部内联完成?

@app.route("/", methods=['GET', 'POST'])
def your_function(request):
doc_type=request.form.get('submit_button')
file_name = secure_filename(file.filename)
blob=file.read()
flash('File upload successful', 'info')
blob=blob+bytes(doc_type,'utf-8')
# turn a blob into new_message, get model_id from somewhere?
project_id=<<proj id>>
val1,val2=predict_value(new_message,model_id,project_id,compute_region)
flash("the uploaded file is "+val1,'info')

关于python - 未在 Python 中正确调用 Google Cloud PubSub,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52108342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com