连接到数据库时运行无限Python脚本

连接到数据库时运行无限Python脚本,python,sql,postgresql,architecture,daemon,Python,Sql,Postgresql,Architecture,Daemon,我正在做一个项目,学习Python、SQL、Javascript和运行服务器——基本上掌握了整个堆栈。现在我的基本目标是: 我希望无限期地运行Python脚本,它不断地对不同的服务进行API调用,这些服务具有不同的速率限制(例如200/hr、1000/hr等),并将结果(INT)存储在数据库(PostgreSQL)中。我想在一段时间内存储这些结果,然后开始使用这些数据在前端显示有趣的内容。我需要它全天候运行。我试图理解这里的总体架构,事实证明四处搜索非常困难。我对粗略伪代码的基本想法是: dat

我正在做一个项目,学习Python、SQL、Javascript和运行服务器——基本上掌握了整个堆栈。现在我的基本目标是:

我希望无限期地运行Python脚本,它不断地对不同的服务进行API调用,这些服务具有不同的速率限制(例如200/hr、1000/hr等),并将结果(INT)存储在数据库(PostgreSQL)中。我想在一段时间内存储这些结果,然后开始使用这些数据在前端显示有趣的内容。我需要它全天候运行。我试图理解这里的总体架构,事实证明四处搜索非常困难。我对粗略伪代码的基本想法是:

database.connect()
def function1(serviceA):
  while(True):
    result = makeAPIcallA()
    INSERT INTO tableA result;
    if(hitRateLimitA):
       sleep(limitTimeA)
def function2(serviceB):
  //same thing, different limits, etc.
我会用ssh连接到我的服务器,运行
python myScript.py&
,关闭我的笔记本电脑,等待数据进入。以下是我的问题:

  • 这种方法有意义吗?或者我应该做一些完全不同的事情吗
  • 像这样无限期地打开数据库连接被认为是“坏的”还是危险的?如果是,我如何管理数据库
  • 我考虑过使用类似于
    cron
    的调度器,但速率限制是可变的。我不能在我的限制达到时每小时运行一次脚本,比如说,在开始时间5分钟后,然后等待60分钟。即使在几分钟的时间间隔内运行它也显得很混乱:我需要睡眠以获得持续的速率限制等待时间,这将不断变化。我认为调度程序不是解决问题的方法,对吗
  • 如何优雅地处理任何意外的潜在致命错误(即日志记录和重新启动)?手动删除或编辑脚本怎么样

我对在这里学习不同的方法和最佳实践很感兴趣——任何和所有的建议都将不胜感激

事实上,我做的和你为我的一个个人应用程序所做的完全一样,我可以解释我是如何做的

我使用芹菜而不是cron,因为它允许在调度中进行更精细的调整,而且它是Python而不是bash,所以更易于使用。我有不同的任务(基本上是一组API调用和DB更新)以不同的时间间隔运行到不同的站点,以考虑不同的速率限制

我将芹菜应用程序作为服务运行,这样即使系统重新启动,也可以轻松地重新启动应用程序

我在应用程序中广泛使用日志库,因为当您只有一个难以读取的堆栈跟踪时,很难调试某些东西。我在整个应用程序中都有信息级别和调试级别的日志,任何警告级别及以上的日志都会打印到控制台并发送到我的电子邮件

对于异常处理,我准备的大部分内容是速率限制问题和随机连接问题。确保在try-except语句中包含发送到API端点的任何HTTP请求,并且可能只实现重试机制

至于DB连接,连接的长度应该无关紧要,但您需要确保在try-except语句中围绕主应用程序循环,并确保在出现异常时关闭连接,从而正常地失败。否则,最终可能会出现大量重影连接,并且在这些连接消失之前,应用程序无法重新连接