如何让线程中while循环在stop_event触发时立即退出,无需等待sleep完成?
解决方案
核心问题在于time.sleep()无法被线程事件中断,你需要用threading.Event自带的wait()方法替代它,这个方法既支持超时等待,又能在事件被触发时立即返回。
修改后的代码如下:
while not stop_event.is_set(): # 用wait替代sleep,超时600秒,事件触发时会立即返回 stop_event.wait(600) # 再次检查事件状态,若已设置则直接退出循环 if stop_event.is_set(): break response = requests.get(api_url, headers=headers, params=params) if response.status_code == 200: print("UPDATED") else: print("NOT UPDATED")
关键说明:
stop_event.wait(600):该方法会阻塞当前线程,直到两种情况之一发生:一是stop_event被设置(此时返回True),二是等待满600秒超时(此时返回False)。- 每次wait后先检查事件状态,确保事件一旦触发,立刻跳出循环,不会执行后续的网络请求逻辑。
这样就能实现stop_event被设置后立即退出循环的需求,无需再等待sleep结束。
内容的提问来源于stack exchange,提问作者Dakshitha Wijesinghe
相关产品推荐
相关产品推荐

