按照上述操作执行stop函数之后 worker函数还是在执行
时间: 2023-12-11 15:02:59 浏览: 52
实际上,使用`thread.stop()`方式停止线程是不安全的,因为它可能会导致线程的资源没有被正确释放,从而导致程序出现异常或崩溃。因此,建议使用一种更好的方式来停止线程,例如使用一个标志位来控制线程是否继续执行。
以下是一个示例代码,通过设置`stop_flag`标志位来控制线程的执行:
```python
from flask import Flask, jsonify
import threading
import time
app = Flask(__name__)
# 存储当前正在运行的线程和标志位
threads = []
stop_flag = False
# 启动一个新的线程
def start_thread():
t = threading.Thread(target=worker)
threads.append(t)
t.start()
# 停止一个线程
def stop_thread(thread):
global stop_flag
stop_flag = True
threads.remove(thread)
# 线程工作函数
def worker():
global stop_flag
while not stop_flag:
print('Working...')
time.sleep(1)
stop_flag = False
# 启动一个新的线程
@app.route('/start')
def start():
start_thread()
return jsonify({'result': 'Thread started successfully!'})
# 停止一个线程
@app.route('/stop')
def stop():
if len(threads) > 0:
stop_thread(threads[-1])
return jsonify({'result': 'Thread stopped successfully!'})
else:
return jsonify({'result': 'No threads to stop!'})
if __name__ == '__main__':
app.run()
```
在上面的代码中,我们使用一个`stop_flag`标志位来控制线程的执行。在`worker`函数中,只有当`stop_flag`为`False`时,线程才会继续执行;当`stop_thread`函数被调用时,我们将`stop_flag`设置为`True`,从而让线程停止执行。这种方式比直接调用`thread.stop()`更安全,因为它可以保证线程的资源被正确释放。