如何在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)
在shell上运行此代码然后执行Ctrl + C时,“Thread outer”打印停止,但“Thread inner”继续打印,直到我使用'kill -9 pid'命令手动终止它。
答案 0 :(得分:1)
在Linux上,每个线程都是一个线程,而不是一个单独的进程。使用ps
查看脚本运行时启动的进程,您将看到一个python进程。
threading module注释的文档:
线程可以标记为“守护程序线程”。这个的意义 flag是只有守护进程线程时整个Python程序退出 离开了。初始值继承自创建线程。该 可以通过守护进程属性设置标志。
...
有一个“主线程”对象;这对应于最初的 Python程序中的控制线程。它不是守护线程。
在行之间读取,整个Python程序仅在所有非守护程序线程(包括主线程)退出时退出。
答案 1 :(得分:1)
线程不是单独的进程。它们与主线程共享相同的资源。发生的事情是Python在退出之前等待所有线程完成运行。
如果希望Python在主进程退出后退出,daemonize所有其他线程。您可以按如下方式执行此操作:
...
threadTest.daemon = True
threadTest.start()
...
这适用于非常基本的线程。但是,根据文档(上面链接):
守护程序线程在关闭时突然停止。他们的资源(例如打开文件,数据库事务等)可能无法正确发布。如果您希望线程正常停止,请使它们成为非守护进程并使用合适的信号机制,例如事件。