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

问题描述 投票:0回答:1

我想写一个函数,让我们说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)

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

python yield
1个回答
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.
© www.soinside.com 2019 - 2024. All rights reserved.