ac = threading.Thread(target=angle_clc) ac.setDaemon(True) ac.start() 已知子线程如上,请问怎么让子线程在主函数运行到一定程度的时候重头开始运行
时间: 2024-05-01 09:21:14 浏览: 84
要实现让子线程在主函数运行到一定程度的时候重头开始运行,可以使用 Event 对象来控制子线程的执行。具体实现方式如下:
首先,在主函数中创建一个 Event 对象,并将其设置为未触发状态:
```
evt = threading.Event()
evt.clear()
```
然后,在子线程中使用一个 while 循环来不断检测 Event 对象是否被触发。如果 Event 对象未被触发,则继续执行子线程的任务;如果 Event 对象被触发,则等待 Event 对象重新被设置为未触发状态后,重头开始执行子线程的任务。
```
def angle_clc():
while True:
# 执行子线程任务
# 检测 Event 对象是否被触发
evt.wait()
# 重新设置 Event 对象为未触发状态
evt.clear()
```
最后,在主函数中使用一个定时器来定时触发 Event 对象,从而让子线程重头开始运行。
```
import threading
import time
def angle_clc():
while True:
# 执行子线程任务
# 检测 Event 对象是否被触发
evt.wait()
# 重新设置 Event 对象为未触发状态
evt.clear()
def restart_thread():
evt.set()
if __name__ == '__main__':
evt = threading.Event()
evt.clear()
ac = threading.Thread(target=angle_clc)
ac.setDaemon(True)
ac.start()
# 每隔5秒触发一次 Event 对象
while True:
time.sleep(5)
restart_thread()
```
这样,当主函数运行到一定程度时,就会定时触发 Event 对象,从而让子线程重头开始运行。
阅读全文