Python:为长时间运行的后台进程生成或线程?

时间:2010-09-14 22:39:11

标签: python background-process spawn

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

谢谢堆

2 个答案:

答案 0 :(得分:4)

请务必考虑Global Interpreter Lock。如果长时间运行的进程是CPU密集型的,那么您应该将其作为一个独立的进程。另一方面,如果它会花费大量的时间来阻止,那么GIL并不是那么大的交易,你可以把它变成一个线程。

此外,如果您不需要os.spawnle提供的特定内容,请考虑使用标准库中的multiprocessing包。它提供了类似于threading包的界面,并且比使用手动生成和跟踪过程更容易使用。

答案 1 :(得分:2)

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

如果您想知道是否应该将自己的代码构建为单独的进程或单独的线程运行,那么请查看一些process v. thread questions like this one以确定哪个更适合您尝试执行的操作。特别是,考虑进程/线程需要共享哪些资源,它们将彼此通信的内容,以及每个需要的强大程度 - 例如,崩溃的线程将使其余的进程失效。