1

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

from threading import Thread

....

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

Thread(target = anotherMethod).start()

....
4

1 回答 1

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()
于 2012-08-14T23:15:58.300 回答