一种轮询间隔并无限收益的函数

时间:2014-11-20 06:39:34

标签: python yield

我想编写一个函数,假设yield_posts定期轮询RESTful API,并且可以在永远运行的for循环中使用,如下所示:

for post in yield_posts():
    do_something_with(post)

我有以下伪代码

def yield_posts():
    while True:
        new_posts = request_new_posts()
        time.sleep(10)
        for post in new_posts:
            if check_in_db(post):
                continue
            yield post
            add_to_db(post)

这是否适用于其预期目的,还是有更好的方法?

1 个答案:

答案 0 :(得分:2)

您的想法将完美地运作。当你调用该函数时,它将永远循环,执行其工作,然后等待给定的时间(此处为10秒)。您可能想查看Thread类,但是,如果您想在此函数运行时执行其他操作,因为在函数打开时您将无法执行任何操作time.sleep().提到while循环意味着函数永远不会结束。

Threading模块的工作原理完全正常。它创建了各种线程供您利用一个线程进行重复性工作(在您的情况下,每10秒重复调用一次函数),同时让主线程保持打开以进行其他工作。

我将你的函数作为一个单独的线程添加的方式如下:

from threading import Thread
class Yield_Posts(Thread):
    run():
        while True:
            #do whatever you need to repetitively in here, like
            time.sleep(10)
            #etc.

separateThread = Yield_Posts()
separateThread.start()
#do other things here, the separate thread will be running at the same time.