我想编写一个函数,假设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)
这是否适用于其预期目的,还是有更好的方法?
答案 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.