Intel N100 Ubuntu服务器上Python小时级定时任务异常终止问题求助
Intel N100 Ubuntu服务器上Python小时级定时任务异常终止问题求助
大家好,想请教个挺奇怪的问题:
我之前在树莓派4的Ubuntu系统上跑了一个Python应用,里面有三个需要按固定间隔调用的函数,周期分别是300秒、600秒和3600秒。这个应用安安稳稳跑了好几个月,完全没出过岔子。
最近我把树莓派改成了开发机,把应用迁移到了搭载Intel N100芯片的Ubuntu服务器上,结果怪事来了:300秒和600秒间隔的任务一直正常运行,但3600秒(也就是1小时)间隔的任务,在第二次到点执行之后就彻底停了,而且全程没有任何报错信息。
最开始我用的是基于threading的定时实现,代码如下:
def call_repeatedly(interval, func, *args, **kwargs): stopped = threading.Event() lock = threading.Lock() # Lock to protect shared state (stopped) def loop(): while not stopped.wait(interval): with lock: # Ensure that no other thread is modifying stopped func(*args, **kwargs) threading.Thread(target=loop, daemon=True).start() return stopped.set
用这个方法时,小时级任务就是在第二次触发后没了动静。
后来我换了sched调度器的实现,代码是这样的:
def call_repeatedly(interval, func, *args, **kwargs): scheduler = sched.scheduler(time.time, time.sleep) def loop(): func(*args, **kwargs) scheduler.enter(interval, 1, loop) scheduler.enter(interval, 1, loop) threading.Thread(target=scheduler.run, daemon=True).start()
结果这个版本能正常跑到午夜,但过了零点之后,小时级任务还是会挂掉。
我怀疑是Intel N100的节能模式影响了线程调度,已经把芯片设置成POLL模式(关闭所有节能选项),但问题依然存在。
另外我注意到一个细节:三个任务的间隔都是3600的约数,所以会在整点时刻同时触发。但为什么在性能更弱的树莓派4上完全没问题,到Intel N100就出问题了呢?有没有大佬遇到过类似的情况,或者能给点排查方向?
备注:内容来源于stack exchange,提问作者Pythonaire
相关产品推荐
相关产品推荐

