繁体   English   中英

Python中的线程 - 线程或进程?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM