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