繁体   English   中英

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

[英]Running an infinite Python script while connected to database

我正在研究一个项目,以学习Python,SQL,Javascript,正在运行的服务器-基本上掌握了全栈知识。 现在,我的基本目标是:

我想无限运行Python脚本,该脚本不断地对具有不同速率限制(例如200 / hr,1000 / hr等)的不同服务进行API调用,并将结果(整数)存储在数据库(PostgreSQL)中。 我想在一段时间内存储这些结果,然后开始使用这些数据在正面显示有趣的内容。 我需要这个来运行24/7。 我正在尝试了解此处的一般体系结构,并且证明搜索非常困难。 我的粗略伪代码的基本思想是:

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.

然后我将进入服务器,运行python myScript.py & ,关闭笔记本电脑,然后等待数据输入。这是我的问题:

  • 这种方法有意义吗,还是我应该做一些完全不同的事情?
  • 像这样无限期地打开数据库连接被认为是“不好的”还是危险的? 如果是这样,我还要如何管理数据库?
  • 我考虑过使用像cron这样的调度程序,但是速率限制是可变的。 我无法在达到极限时(例如开始时间5分钟)每小时都运行脚本,此后有60分钟的等待时间。 即使每隔几分钟运行一次,也看起来很混乱:我需要睡觉以等待持续的速率限制等待时间,而等待时间会不断变化。 我以为调度程序不是这里的正确方法吗?
  • 如何妥善处理任何意外的潜在致命错误(即记录和重新启动)? 手动终止脚本或对其进行编辑呢?

我有兴趣在这里学习不同的方法和最佳做法-任何建议都将不胜感激!

实际上,对于我的一种个人应用程序,我确实会做您所做的事情,并且我可以解释我如何做。

我使用Celery而不是cron,因为它可以在日程安排中进行更好的调整,并且它是Python而不是bash,因此使用起来更容易。 我对以不同间隔运行的不同站点有不同的任务(基本上是一组API调用和数据库更新),以解决各种不同的速率限制。

我将Celery应用程序作为服务运行,因此即使系统重新启动,重新启动应用程序也很简单。

我在应用程序中广泛使用了日志记录库,因为当您仅有一个很难读取的堆栈跟踪信息时,很难调试某些东西。 我在整个应用程序中分布了INFO级别和DEBUG级别的日志,所有WARNING级别及以上的日志都被打印到控制台并发送到我的电子邮件中。

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

至于数据库连接,连接的时间长短无关紧要,但是您需要确保将主应用程序循环包含在try-except语句中,并通过在出现以下情况时关闭连接来确保其正常失败一个例外。 否则,您可能最终会遇到许多虚假连接,并且在这些连接消失之前,您的应用程序将无法重新连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM