如何在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的返回值,因此,我将能够传递给父函数connect(),因此当我调用它时,它将返回返回的值。 message.body来自子功能。

我会想到以下内容:

import gnsq

class something():
    def __init__(self,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()正在阻止

szj0128 回答:如何在python中获取函数的返回值

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

我认为这不是您真正想使用的方式,只有在您提供有关为什么以及如何使用此输出的更多上下文的情况下,这才有意义。

本文链接:https://www.f2er.com/3083553.html

大家都在问