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

时间:2012-08-14 19:30:04

标签: python

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

from threading import Thread

....

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

Thread(target = anotherMethod).start()

....

1 个答案:

答案 0 :(得分:2)

你没有关闭线程。它们将一直运行直到你的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()