3

我打算用 Python 做一个长时间运行的后台进程,但我仍然不确定是使用os.spawnle还是线程。我只读过它,因此我对 spawn 或 thread 都没有太多经验。有什么经验法则什么时候使用哪个?

非常感谢

4

2 回答 2

4

请务必考虑全局解释器锁定。如果长时间运行的进程是 CPU 密集型的,您可能应该将其设为独立进程。另一方面,如果它会花费大量时间阻塞,那么 GIL 并不是什么大不了的事,你应该可以将其作为线程。

此外,如果您不需要特别os.spawnle提供的东西,请考虑使用标准库中的 多处理包。它提供了一个类似于threading包的接口,并且比手动生成和跟踪进程更容易使用。

于 2010-09-15T02:35:07.650 回答
2

明显的区别在于它os.spawnle用于启动另一个运行不同程序的进程,而线程将执行属于同一程序的代码。实际上,如果您的后台进程是已经存在的其他程序,那么os.spawnle(或其他创建单独进程的方法)是您唯一的选择;一个程序中的两个线程必须运行同一个程序。

如果您想知道是否应该构建自己的代码以作为单独的进程或作为单独的线程运行,那么请查看一些类似这样的进程与线程问题,以决定哪个更适合您正在尝试做的事情。特别是,考虑进程/线程需要共享哪些资源,它们将相互通信什么,以及每个需要有多健壮——例如,一个线程崩溃将导致进程的其余部分随之停止。

于 2010-09-14T23:29:40.230 回答