我设置了多个需要同时运行的方法。我决定为上述方法创建单独的线程。还有一种方法是我创建的唯一目的是创建另一个线程。这是我所做的一个例子。我的问题是,我怎样才能安全地关闭这些线程?
from threading import Thread
....
def startOtherThread():
Thread(target = myMethod).start()
Thread(target = anotherMethod).start()
....
我设置了多个需要同时运行的方法。我决定为上述方法创建单独的线程。还有一种方法是我创建的唯一目的是创建另一个线程。这是我所做的一个例子。我的问题是,我怎样才能安全地关闭这些线程?
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()