为什么线程死亡/阻塞?

时间:2014-12-25 07:51:18

标签: python multithreading

我编写了一个函数 collect_data ,使用4个线程从4个网站收集数据(例如,网站 a d )并更新mysql表中的数据,同时发生; 在表中,有4个字段,每个字段存储来自一个网站的数据 更新表时,4个线程没有使用锁。 4个线程每10秒收集数据并在mysql中更新数据。

def collect_data(site_list = ['a', 'b', 'c', 'd']):
     for site in site_list:
        InfoCollectingThread(site).start()

不幸的是,经过一段时间的运行(比如3个小时),mysql中没有新的记录。 似乎有些线程已经过时,因为相应的字段没有更新。

我的问题是我的设计过程和解决方案存在哪些问题? 圣诞快乐。

1 个答案:

答案 0 :(得分:2)

我们有太多可能的原因和太少的信息无法做出明智的猜测。我可以为您提供的一些建议如何解决这个问题:

  • 将调试输出添加到线程'事件循环,以更好地了解他们正在做什么。
  • 在所有线程函数周围添加异常处理(例如,try - finally部分),同时使用调试输出。这样,如果一个线程死了,你就会知道。
  • 添加一个信号处理程序,打印出所有活动线程的堆栈跟踪,并在发生故障后使用它检查程序的状态。您可以找到一些有用的代码here