使用数据库的多线程程序的体系结构

时间:2013-07-10 18:49:51

标签: python mysql database multithreading

我有一个相当简单的Python程序,如下所述:

它有2个线程加上主线程。其中一个线程收集一些数据并将其放在队列中。

第二个线程从队列中取出并记录它。现在它只是打印出队列中的东西,但我正在努力将它添加到本地MySQL数据库。

这是一个需要运行很长时间(至少几个月)的过程。

我应该如何处理数据库连接?在main中创建它,然后将其传递给日志记录线程,或者直接在日志记录线程中创建它?如何以强大的方式处理数据库连接(中断,MySQL服务器崩溃等)的意外情况?

1 个答案:

答案 0 :(得分:0)

  

我应该如何处理数据库连接?在main中创建它,   然后将其传递给日志记录线程,或直接在其中创建   记录线程?

我可能会使用创建连接的类来配置您的日志记录组件,并让您的日志记录组件请求它。这称为依赖注入,在测试方面使生活更轻松,例如你以后可以嘲笑这个。

如果日志记录组件本身创建了连接,那么以独立方式测试日志记录组件将很困难。通过注入处理这些的组件,您可以根据请求创建一个返回虚拟对象的模拟,或者提供连接池的模拟(等等)。

如何有效地处理数据库问题取决于您希望发生的事情。首先使您的数据库交互成为事务性的(因此是原子的)。现在,您是否希望您的记录器组件在重试写入时停止系统。你想要它缓冲写入并尝试带外(即在另一个线程上)吗?写这个是关键任务,还是能够丢失数据(例如放弃写错)。我在这里没有提供任何具体的答案,因为根据您的要求有很多选择。以上详述了一些可能的选择。

相关问题