Python 从单个函数调用返回连续结果

Python 从单个函数调用返回连续结果,python,events,data-structures,asynchronous,Python,Events,Data Structures,Asynchronous,我遇到了一个问题。 是这样的,, 函数通常返回单个结果。我想要的是返回特定时间范围内连续的结果流(可选) 函数重复返回单个函数调用的结果是否可行 在浏览网络时,我确实遇到了gevent和线程。如果是这样的话,它会起作用吗?如何解决 我只需要调用函数“执行工作”,并在每个任务完成后立即返回结果。您的gevent和threading都在正确的轨道上,因为函数完成了编程的任务,要么一次接受1个变量,要么获取一个集合并返回一个集合或变量。必须调用该函数才能返回任一结果,并且连续的处理流可能已经发生,或者

我遇到了一个问题。 是这样的,, 函数通常返回单个结果。我想要的是返回特定时间范围内连续的结果流(可选)

函数重复返回单个函数调用的结果是否可行

在浏览网络时,我确实遇到了gevent和线程。如果是这样的话,它会起作用吗?如何解决


我只需要调用函数“执行工作”,并在每个任务完成后立即返回结果。

您的gevent和threading都在正确的轨道上,因为函数完成了编程的任务,要么一次接受1个变量,要么获取一个集合并返回一个集合或变量。必须调用该函数才能返回任一结果,并且连续的处理流可能已经发生,或者您正在询问内核指针上的循环或类似的问题,而您不是,因此

因此,封装函数的调用代码非常重要,函数、任何函数,例如,即使是真/假布尔函数,也只会执行,直到它的变量完成为止,因此在您的情况下,可能会有一个调用函数无限期地侦听。如果它不存在,你应该写一个;)

调用封装的代码当然非常重要

人们不会有足够的信息来帮助你,除非我们可以告诉你,你已经在或者应该在某个框架的事件循环中,或者其他代码的某种形式的循环中——这就是你想要监听/准备数据的地方

我喜欢“函数编程”、“映射函数”之类的东西。我想。我不能在我的代表级别发表评论,否则我会将我的猜测限制在这一点上。:)


为了从另一个人那里得到更好的答案,请发布一些示例代码,如果可能的话,展示您的API。

问题中没有说明您为什么需要它,因此很难知道您需要什么,但我会给您一个大概的想法,以及代码

您可以这样返回:
返回var1、var2、var3
(但我认为这不是您需要的)

您有多个选项:阻塞或非阻塞。阻塞意味着调用函数时代码将不再执行。非阻塞意味着它将并行运行。您还应该知道,您肯定需要修改调用该函数的代码

如果您希望将其放在线程中(非阻塞):

另一个选项(阻塞)涉及一种特殊类型的函数
生成器
,在技术上被视为迭代器。所以您将它定义为一个函数,并充当迭代器。这是一个示例,使用与另一个相同的虚拟函数:

def my_generator():
    import time
    total = 0
    while True:
        time.sleep(1)
        total += 1
        yield total

# And here's how you use it:
# You need it to be in a loop !!
for time_spent in my_generator():
    print "Time spent is:", time_spent

# Or, you could use it that way, and call .next() manually:
my_gen = my_generator()
# When you need something from it:
time_spent = my_gen.next()
注意在第二个示例中,代码没有任何意义,因为它不是真正以1秒的间隔调用的,因为每次它
产生
s某物或
时都会运行另一个代码。下一个
被调用,这可能需要时间。但我希望你明白了


同样,这取决于你在做什么,如果你正在使用的应用程序有一个“事件”框架或类似的框架,你需要使用它,如果你需要它阻止/非阻止,如果时间很重要,你的调用代码应该如何处理结果…

你能重新编程这个函数吗?我不确定我是否完全理解这个问题。您是否正在寻找对函数的某种非阻塞调用,并在函数有有趣的内容要让调用方知道时得到通知?请阅读和。您对结果做了什么?
def my_generator():
    import time
    total = 0
    while True:
        time.sleep(1)
        total += 1
        yield total

# And here's how you use it:
# You need it to be in a loop !!
for time_spent in my_generator():
    print "Time spent is:", time_spent

# Or, you could use it that way, and call .next() manually:
my_gen = my_generator()
# When you need something from it:
time_spent = my_gen.next()