Python:使用线程处理作业

Python:使用线程处理作业,python,multithreading,gil,Python,Multithreading,Gil,有一个相当大的多线程python2 web应用程序。在主线程工作的业务逻辑中,在子线程中主要运行数据库操作。现在没有使用TreadPoolExecutor,并且在最近的将来无法实现它。我想添加另一个线程,它应该处理一定数量的数据(fast),并将结果存储到数据库中(io操作)。此操作不会经常执行 所以,问题是:我应该运行大部分休眠线程并等待事件处理数据,还是最好在有足够数据时从主线程生成新线程,并在处理完成后关闭它?注意,已经有相当多的线程在运行,GIL可以在它们之间切换 谢谢。如果您每天运行一

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

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


谢谢。

如果您每天运行一次这个进程,那么创建线程和销毁线程的开销可以忽略不计

等待信号的线程(如队列中的消息)不需要CPU,因此不需要让它挂起

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

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


如果线程可能会暂停,或者您遇到死锁等问题,那么最好杀死任何现有的工作线程,并启动一个干净的线程。

我知道GIL会在不同线程之间不断切换(比如在处理100个字节码之后),即使这些线程处于休眠状态。这可能会降低整体性能,因为应用程序已经有大量线程。@sunrize531:您有引用吗?另外,您是否考虑过在新的(分叉的)进程中运行该任务?您确定线程是正确的解决方案吗?嗯,事实上,我确信子进程会做得更好:)尽管由于线程中的DB操作,性能还是有好处的。目前,我们无法摆脱线程,因为应用程序非常大,而且很旧,而且大多数设计都很差。我也只是想知道