2013-03-25 94 views
0

python如何实现线程? python是否为每个线程创建一个单独的进程?Python中的线程 - 线程或进程?

考虑这段代码。

from threading import Thread 
from time import sleep 


class testThread(Thread): 
    def __init__(self): 
     Thread.__init__(self) 
    def run(self): 
     while True: 
      print "Thread inner!" 
      sleep(5) 
threadTest = testThread() 
threadTest.start()  
while True: 
    print "Thread outer!" 
    sleep(10) 

在外壳上运行此代码,然后做一个CTRL + C“线程外”打印停止来,然而,“螺纹内径”继续得到印刷直到我手动杀死它使用“杀死-9 pid'命令。

+1

将线程设置为守护进程 – JBernardo 2013-03-25 23:19:32

回答

1

每个线程在Linux上是一个线程,而不是一个单独的进程。使用ps来查看脚本运行时启动的进程,并且您将看到一个单独的python进程。

threading module笔记的文档:

线程可以被标记为“守护线程”。这个 标志的意义在于,只有守护程序线程 剩下时,整个Python程序才会退出。初始值是从创建线程继承的。 标志可以通过守护进程属性设置。

...

有一个“主线程”对象;这对应于Python程序中最初的 控制线程。它不是一个守护线程。

在行之间读取时,整个Python程序仅在所有非守护线程(包括主线程)退出时退出。

+0

谢谢!这工作。 – CPS 2013-03-25 23:56:23

1

线程不是单独的进程。它们与主线程共享相同的资源。发生什么事是Python在退出之前等待所有线程完成运行。

如果您希望在主进程退出后退出Python,则所有其他线程都退出daemonize。你可以这样做:

... 
threadTest.daemon = True 
threadTest.start() 
... 

这将适用于非常基本的线程。但是,根据文档(上面链接):

守护程序线程在关机时突然停止。他们的资源(如打开文件,数据库事务等)可能无法正确释放。如果你希望你的线程正常停止,使它们不是守护进程,并使用合适的信号机制,如事件。