Python:使用线程处理作业

时间:2014-07-21 09:11:06

标签: python multithreading gil

有一个非常大的多线程python2 Web应用程序。在主线程工作的业务逻辑中,子线程主要是数据库操作运行。现在没有使用TreadPoolExecutor,并且在最近的将来无法实现。我想添加另一个线程,它应该处理一定数量的数据(快速)并将结果存储到DataBase(io-operation)中。此操作不会经常执行。

所以,问题是:我应该主要运行休眠线程并等待事件处理数据,或者当有足够数据时最好从main生成新线程并在处理完成时关闭它?请注意,已经有相当多的线程在运行GIL以在它们之间切换。

感谢。

1 个答案:

答案 0 :(得分:1)

如果你每天运行一次这个过程,那么创建线程并销毁它的开销可以忽略不计。

正在等待信号的线程(如队列中的消息)不需要CPU,因此不需要花费它来保持它。

这意味着您可以查看其他设计因素:错误处理,稳定性,代码复杂性。

如果你已经确定了错误处理,那么保持线程活着可能会更好,因为这将为你处理一个极端情况:意外地同时运行两个实例。

如果线程可以停止或者您遇到死锁等问题,那么最好杀死任何现有的工作线程并开始干净。