我想写一个函数,让我们说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)
这是否适用于其预期目的,还是有更好的方法?
你的想法将完美地运作。当你调用该函数时,它将永远循环,执行其工作,然后等待给定的时间(此处为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.