gpt4 book ai didi

python - 在Python中,我应该为此使用线程吗?

转载 作者:行者123 更新时间:2023-11-30 22:48:17 25 4
gpt4 key购买 nike

我正在开发一个小程序,用于收集某些数据并对其进行处理。目前,该程序在我的服务器上不断运行,将数据存储到磁盘上。每隔一段时间,我就会运行另一个程序来读取存储的数据,对其进行处理、排序、将其保存到新位置,并清除旧的数据文件。

我从未了解过线程,但听起来这是一个使用它们的好地方?如果线程按照我认为的方式工作,我可以设置一个队列来保存数据,并有一个单独的线程可以从队列中提取数据并在准备好时对其进行处理。如果队列已满,线程 1 可以休眠一会儿。如果它是空的,线程2可以休眠一会儿

这将减少磁盘写入,摆脱磁盘读取,并使数据收集与数据处理并行运行以节省时间。

这些内容准确吗?我是一名计算机科学高年级学生,并且从未出现过线程(这肯定有点奇怪吗?)。我将不胜感激任何有关使用线程的提示/知识/建议,以及这是否是我的“问题”的正确解决方案。

谢谢!

最佳答案

这听起来确实像是某种形式的并行性可能有用的情况。然而,由于这是 Python,您可能不想实际使用线程。 Python,在标准实现中,有一个叫做全局解释器锁的东西。实际上,为了让垃圾收集器发挥作用,Python 程序实际上在任何时候都只能有一个线程在运行 Python 代码(直接用 C 编写的模块,或者磁盘 IO 或数据库查询等外部操作,都不是“运行 Python 代码”) “为此目的,尽管您将从 Python 中调用它们)。

因此,只有当您的 Python 代码花费大量时间等待来自程序的非 Python 部分或外部源的响应时,Python 中的线程通常才是一个好主意。如果数据收集或处理是在 Python 之外完成的(从数据库或网站收集、在 numpy 中处理等),这可能是合理的。如果您的代码不经常处于这种情况,那么您的程序最终在线程之间切换时浪费的时间会多于获得的时间(因为如果两个线程都在 Python 代码中,它仍然一次只运行一个)

如果没有,您应该尝试 multiprocessing模块代替。这通常也是一种更安全的模型,因为多处理中进程之间唯一可以共享的东西是您显式共享的东西(而线程共享所有状态,可能允许一个线程破坏另一个线程,因为您忘记锁定某些东西)。

或者,您可以使用 subprocess 。实际上,这将使您的第一个程序在每次完成一批数据时间歇性地重新启动第二个程序。

关于python - 在Python中,我应该为此使用线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40225999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com