[英]Threading in Python - Threads or processes?
如何在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'命令手动终止它。
在Linux上,每个线程都是一个线程,而不是一个单独的进程。 使用ps
查看脚本运行时启动的进程,您将看到一个python进程。
线程模块的文档说明:
线程可以标记为“守护程序线程”。 这个标志的意义在于,当只剩下守护进程线程时,整个Python程序都会退出。 初始值继承自创建线程。 可以通过守护程序属性设置该标志。
...
有一个“主线程”对象; 这对应于Python程序中的初始控制线程。 它不是守护程序线程。
在行之间读取,整个Python程序仅在所有非守护程序线程(包括主线程)退出时退出。
线程不是单独的进程。 它们与主线程共享相同的资源。 发生的事情是Python在退出之前等待所有线程完成运行。
如果您希望在主进程退出后退出Python,请守护所有其他线程。 你可以这样做:
...
threadTest.daemon = True
threadTest.start()
...
这适用于非常基本的线程。 但是,根据文档(上面链接):
守护程序线程在关闭时突然停止。 他们的资源(例如打开文件,数据库事务等)可能无法正确发布。 如果您希望线程正常停止,请将它们设置为非守护进程并使用合适的信号机制(如Event)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.