簡體   English   中英

如何在 python 中獲取 function 的返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM