python - 如何关闭用于运行方法的线程?

标签 python

我设置了多个需要同时运行的方法。我决定为上述方法创建单独的线程。我还有一个方法,其唯一目的是创建另一个线程。这是我所做的一个例子。我的问题是,如何安全地关闭这些线程?

from threading import Thread

....

def startOtherThread():
    Thread(target = myMethod).start()

Thread(target = anotherMethod).start()

....

最佳答案

您没有关闭线程。它们将运行直到您的 target= 方法完成。目前尚不清楚为什么您要尝试引入单独的方法来启动线程: Thread(target=...).start() 看起来很简单。

当您使用线程时,您有三个基本选项:
- 在主线程中等待,直到子线程使用 join() 函数完成
- 不做任何事情就让子线程运行
- 当主线程结束时,通过在线程对象上使用 setDeamon(True) 退出子线程。

还需要了解cPython中的GIL(全局解释器锁)

这是一些线程的基本测试代码:

import threading
import time
import sys


def f():
    sys.stderr.write("Enter\n")
    time.sleep(2)
    sys.stderr.write("Leave\n")


if __name__ == '__main__':
    t0 = threading.Thread(target=f)
    t1 = threading.Thread(target=f)
    t0.start()
    time.sleep(1)
    t1.setDaemon(True)
    t1.start()
    #t1.join()

关于python - 如何关闭用于运行方法的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11959434/

相关文章:

python - numpy 如何计算指数?

python - Vaultier 无法用于 docker/ubuntu/debian (Python)

python - _tkinter.TclError : unknown option "-bg" for ttk. 框架

python - 使用 Flask/Python 索引超出范围

python - 关于数据结构和算法书中代码的问题

python - Django:允许从 S3 下载各种媒体文件而无需创建模型(同时隐藏 s3 存储)

python - 在 python 3 上无缓冲地写入

python - 如何根据时间间隔合并两个数据帧并进行转换

python - 如何导航美丽汤中的特定标签?

python - 为什么我在 Django 通知中收到此错误?