长期运行Python主程序并行网络检查实现及欧盟隐私DNS推荐
问题解答
一、欧盟境内符合要求的DNS服务器
以下是欧盟境内、承诺不收集个人数据且运行稳定的DNS服务:
- Quad9 欧盟节点:
9.9.9.10(位于荷兰阿姆斯特丹),公益性质的安全DNS,明确执行无日志政策,宕机概率极低。 - DNS.WATCH:
84.200.69.80(位于瑞典),长期提供无日志DNS服务,运行稳定,属于欧盟境内节点。 - CleanBrowsing 德国节点:
185.228.168.9(位于德国),严格遵守隐私政策,不收集用户访问数据,可选普通无过滤版本。
你可以将现有代码中的("1.1.1.1", 80)替换为上述任意节点的IP和端口(80或53均可,用80端口可避免部分网络对DNS端口的限制)。
二、实现辅助程序暂停主程序的方案
可以通过多线程+事件信号的方式实现:用独立线程运行网络检查逻辑,通过threading.Event控制主程序的暂停与恢复,无需主动"中断"主程序,而是让主程序在网络断开时进入等待状态。
完整代码示例
import socket import threading import time def check_internet_connection() -> bool: """检查网络连接,使用欧盟境内隐私友好的DNS服务器""" try: # 使用Quad9欧盟节点(荷兰阿姆斯特丹) socket.create_connection(("9.9.9.10", 80), timeout=5) return True except OSError: return False def network_monitor(stop_event: threading.Event, resume_event: threading.Event): """独立线程运行的网络监控逻辑""" while not stop_event.is_set(): is_connected = check_internet_connection() if is_connected and not resume_event.is_set(): resume_event.set() print("网络恢复,主程序继续运行") elif not is_connected and resume_event.is_set(): resume_event.clear() print("网络断开,主程序暂停") time.sleep(10) # 每10秒检查一次,可根据需求调整间隔 def main_program(resume_event: threading.Event): """长期运行的主程序逻辑""" while True: # 等待网络恢复(网络正常时resume_event处于设置状态,直接跳过等待) resume_event.wait() # 这里替换为你的主程序联网逻辑 print("主程序执行联网任务...") try: # 示例:模拟联网操作 # socket.create_connection(("your-target-server.com", 80), timeout=10) time.sleep(2) # 模拟任务耗时 except Exception as e: print(f"主程序任务出错: {e}") if __name__ == "__main__": # 用于停止监控线程的信号 stop_monitor = threading.Event() # 用于控制主程序暂停/恢复的信号 resume_main = threading.Event() # 初始网络状态检查 if check_internet_connection(): resume_main.set() else: print("初始网络断开,主程序等待连接...") # 启动监控线程(守护线程,主程序退出时自动终止) monitor_thread = threading.Thread( target=network_monitor, args=(stop_monitor, resume_main), daemon=True ) monitor_thread.start() try: main_program(resume_main) except KeyboardInterrupt: stop_monitor.set() print("程序已退出")
核心逻辑说明
- 线程隔离:网络监控逻辑在独立线程中运行,不阻塞主程序的正常执行。
- 事件控制:
resume_event作为主程序的运行许可:- 网络正常时,事件处于"设置"状态,主程序正常执行。
- 网络断开时,事件被"清除",主程序在
resume_event.wait()处进入阻塞等待,直到网络恢复、事件重新被设置。
- 低资源消耗:监控线程每隔固定时间检查一次网络,避免频繁检测占用资源。
内容的提问来源于stack exchange,提问作者user20874428
相关产品推荐
相关产品推荐

