FastAPI - 运行 在后台连续获取请求的最佳方式
FastAPI - Best way to run continuous GET requests in the background
我正在尝试创建一个程序,该程序定期从大约 10 个网站发出 GET 请求,并在本地更新数据库中的信息。现在当用户需要信息时,我会显示本地存储的汇总信息。
我正在尝试找出 运行 FastAPI 中这些周期性 GET 请求的最佳方法。我是 FastAPI 的新手,仍在努力解决问题。
经过一番研究,我想到了两个选择:
- 使用后台任务端点,该端点 运行 定期执行 GET 请求,从每个网站一一发出。
- 使用 Celery 执行这些 GET 请求
如果有人有做过类似事情的经验,我想找出最好的方法,或者我将如何找到最好的方法?
我认为 Celery 对于一项周期性任务来说太过分了。 Celery 需要一个代理(以及更好的后端)。您打算 bringup/manage RabbitMQ 仅用于单个任务吗?
一个更简单的解决方案可以使用 asyncio
:
TIME_INTERVAL_IN_SEC = 60
async def crawl_websites():
while True:
# async GET requests
# async update DB
await asyncio.sleep(TIME_INTERVAL_IN_SEC)
loop = asyncio.get_event_loop()
task = loop.create_task(crawl_websites())
loop.run_until_complete(task)
我正在尝试创建一个程序,该程序定期从大约 10 个网站发出 GET 请求,并在本地更新数据库中的信息。现在当用户需要信息时,我会显示本地存储的汇总信息。
我正在尝试找出 运行 FastAPI 中这些周期性 GET 请求的最佳方法。我是 FastAPI 的新手,仍在努力解决问题。
经过一番研究,我想到了两个选择:
- 使用后台任务端点,该端点 运行 定期执行 GET 请求,从每个网站一一发出。
- 使用 Celery 执行这些 GET 请求
如果有人有做过类似事情的经验,我想找出最好的方法,或者我将如何找到最好的方法?
我认为 Celery 对于一项周期性任务来说太过分了。 Celery 需要一个代理(以及更好的后端)。您打算 bringup/manage RabbitMQ 仅用于单个任务吗?
一个更简单的解决方案可以使用 asyncio
:
TIME_INTERVAL_IN_SEC = 60
async def crawl_websites():
while True:
# async GET requests
# async update DB
await asyncio.sleep(TIME_INTERVAL_IN_SEC)
loop = asyncio.get_event_loop()
task = loop.create_task(crawl_websites())
loop.run_until_complete(task)