gpt4 book ai didi

Python:如何使用 Tornado 从生成器函数返回?

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

我使用 yield 和 task 异步获取四个 json:

@gen.engine
def get_user_data(self, sn, snid, fast_withdrawals):
end_timestamp = time.time()
start_timestamp = end_timestamp - CONFIG.LOYALITY_LEVELS.PERIOD

active_apps_response, total_payments_response, payments_for_period_response, withdrawals_response = yield [
gen.Task(self.http_client.fetch, self.__get_active_apps_url(sn, snid)), gen.Task(self.http_client.fetch, self.__get_total_payments_url(sn, snid)),
gen.Task(self.http_client.fetch, self.__get_payments_sum_for_period_url(sn, snid, start_timestamp, end_timestamp)),
gen.Task(self.http_client.fetch, self.__get_total_withdrawals_url(sn, snid, fast_withdrawals))
]

active_apps = self.__active_apps_handler(active_apps_response)
total_payments = self.__get_total_payments_handler(total_payments_response)
payments_for_period = self.__payments_sum_for_period_handler(payments_for_period_response)
withdrawals = self.__get_total_withdrawals_handler(withdrawals_response)

yield gen.Return(active_apps, total_payments, payments_for_period, withdrawals)

但是,如果我使用 yield 而不是 return,上层函数也会变成生成器,我也不能在其中使用 return。那么,如何在不创建调用函数生成器的情况下从 Tornado 中的函数返回结果?我正在使用 Python 2.7

最佳答案

您不能同时返回值和产生值。当您产生值时,该函数返回一个生成器 - 因此它已经返回了一个值并且不能返回更多。这样做根本没有意义。

您可以在没有任何值的情况下调用 return 以导致 StopIteration 异常并结束生成器,但从生成器内部返回值在语义上没有意义。

如果你想有时返回一个生成器,有时返回一个值,用另一个返回生成器(通过调用此函数创建)或替代值的函数包装你的函数,虽然我不认为这样的事情是从设计的角度来看,这通常是个坏主意。

关于Python:如何使用 Tornado 从生成器函数返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16776389/

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