我有一个相当简单的 Python 程序,如下所述:
它有2个线程加上主线程。其中一个线程收集一些数据并将其放在队列中。
第二个线程从队列中取出东西并记录它。现在它只是打印队列中的东西,但我正在努力将它添加到本地 MySQL 数据库中。
这是一个需要运行很长时间(至少几个月)的过程。
我应该如何处理数据库连接?在main中创建,然后传递给日志线程,还是直接在日志线程中创建?以及如何以稳健的方式处理数据库连接的意外情况(中断、MySQL 服务器崩溃等)?
我有一个相当简单的 Python 程序,如下所述:
它有2个线程加上主线程。其中一个线程收集一些数据并将其放在队列中。
第二个线程从队列中取出东西并记录它。现在它只是打印队列中的东西,但我正在努力将它添加到本地 MySQL 数据库中。
这是一个需要运行很长时间(至少几个月)的过程。
我应该如何处理数据库连接?在main中创建,然后传递给日志线程,还是直接在日志线程中创建?以及如何以稳健的方式处理数据库连接的意外情况(中断、MySQL 服务器崩溃等)?
我应该如何处理数据库连接?在main中创建,然后传递给日志线程,还是直接在日志线程中创建?
我可能会使用创建连接的类来配置您的日志组件,并让您的日志组件请求它。这称为依赖注入,并且在测试方面使生活更轻松,例如您可以稍后模拟它。
如果日志组件自己创建连接,那么以独立方式测试日志组件将很困难。通过注入一个处理这些的组件,您可以制作一个根据请求返回虚拟对象的模拟,或者一个提供连接池(等等)的模拟。
您如何可靠地处理数据库问题取决于您想要发生的事情。首先使您的数据库交互具有事务性(因此是原子性的)。现在,您是否希望您的记录器组件在重试写入时让您的系统停止。您是否希望它缓冲写入并尝试带外(即在另一个线程上)?写这个是关键任务还是你能承受丢失数据(例如放弃一个糟糕的写)。我在这里没有提供任何具体的答案,因为根据您的要求有很多选择。上面详细介绍了一些可能的选项。