[英]How to get a return value of a function in python
import gnsq
class something():
def __init__(self, pb=None, pk=None, address=None):
self.pb = pb
self.pk = pk
self.address = address
def connect(self):
consumer = gnsq.Consumer(self.pb, 'ch', self.address)
@consumer.on_message.connect
def response_handler(consumer, msg):
return msg.body
consumer.start()
我將如何獲得response_handler
的返回值,所以反過來,我可以傳遞給父 function connect()
,所以當我調用它時,它將返回來自子 function 的message.body
的值。
我會想到以下內容:
import gnsq
class something():
def __init__(self, pb=None, pk=None, address=None):
self.pb = pb
self.pk = pk
self.address = address
def connect(self):
consumer = gnsq.Consumer(self.pb, 'ch', self.address)
@consumer.on_message.connect
def response_handler(consumer, msg):
return msg.body
consumer.start()
return response_handler
nsq = something('pb', 'pk', 'address')
# should print whatever message.body is
print nsq.connect()
但它不起作用。 注意: consumer.start()
正在阻塞
你所問的在Consumer()
真正是什么的背景下沒有意義。
在您的connect()
方法中,您設置了一個消費者,設置了一個響應處理程序並使用consumer.start()
啟動消費者。 從那時起,只要有消息要消費,消費者就會使用該消息調用處理程序。 不只是一次,而是一次又一次。
您的處理程序可能會被多次調用,除非消費者已關閉,否則您永遠不知道何時完成 - 因此,您的connect()
方法無法返回完整的結果。
您可以做的是讓 connect 方法返回對集合的引用,該集合將在任何時候包含迄今為止收集的所有消息。 起初它是空的,但一段時間后,它可能包含所有收到的消息。
就像是:
import gnsq
class Collector():
def __init__(self, topic, address):
self.topic = topic
self.address = address
self.messages = []
def connect(self):
self.messages = []
consumer = gnsq.Consumer(self.pb, 'ch', self.address)
@consumer.on_message.connect
def response_handler(consumer, msg):
self.messages.append(msg)
consumer.start()
return self.messages
我不認為這真的是你想要使用它的方式,如果你提供更多關於你為什么以及如何使用這個 output 的上下文,它才會真正有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.