2010-09-14 195 views
3

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

感谢满口

+0

这将运行多久?也许它是一个守护进程? – Falmarri 2010-09-14 23:21:26

+0

是的守护进程可能是一个不错的选择。但是如果我想分解这个过程,守护进程可能会发生吗? – 2010-09-15 00:01:41

回答

4

请确保您考虑到Global Interpreter Lock。如果长时间运行的进程是CPU密集型的,那么你应该把它作为一个独立的进程。如果另一方面,它会花费很多时间来阻止,那么GIL并不是什么大事,你应该没问题。

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

+0

千万不要以为'multiprocessing'模块。感谢您指出了这一点。 – 2010-09-15 10:30:19

2

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

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