如果用Python搭建一个小车项目,那么定时任务是必不可少的。Python中定时主要有以下4种方法。
上述4种方法的实现与特点网上很多介绍,结论就是APScheduler最好,而我主要的关注点为定时器的准确性和能够实现的最短定时是多少。
编辑如下代码(需要提前安装好APScheduler包),周期定时1ms,并输出当前时间与时间差。
import time
import datetime
from apscheduler.schedulers.blocking import BlockingScheduler
pre_time=0;
def func():
global pre_time
now = time.time()
cha=now-pre_time
pre_time=now
print(now," ",cha)
scheduler = BlockingScheduler()
scheduler.add_job(func, 'interval', seconds=0.001, id='main')
scheduler.start()
发现在运行的时候会经常报错,而且时间误差很大,都是偏大,将周期定时改为10ms,结果如下。
运行起来没有了错误,但是仍然有±3%左右的误差。这个误差一个需要实时控制的项目中也是致命的,因此使用python中定时器来做实时定时任务是失败的。
我想这主要是和python执行代码效率低有关,Linux本身不是一个实时操作系统也是一个原因。
问题
Python在定时器方面这么拉胯,那是不是C语言会好一些呢?
源码
GitHub:https://github.com/wanli-car/Examples/blob/master/Python/Timer_APS.py
Gitee:https://gitee.com/wanli-car/Examples/blob/master/Python/Timer_APS.py
"万里"树莓派小车汇总贴:
lb8820265的“万里”树莓派小车开源分享 - DIY/开源硬件专区 - 电子工程世界-论坛 (eeworld.com.cn)
目录:
2“万里”树莓派小车——python学习(Thonny的使用)
4“万里”树莓派小车——C++学习(编译与运行,geany使用)
5“万里”树莓派小车——wiringPi学习(延时与线程模拟定时器)
6“万里”树莓派小车——wiringPi学习(PWM与外部中断模拟定时器)
7“万里”树莓派小车——RPi.GPIO学习(PWM与外部中断模拟定时器)
10“万里”树莓派小车——socket学习(UDP两机通讯)
11“万里”树莓派小车——socket学习(Android发送)
12“万里”树莓派小车——socket学习(Android收发)
19“万里”树莓派小车——VSCode学习(多C文件链接调试)
21“万里”树莓派小车——电机控制学习(4轮速度控制)
22“万里”树莓派小车——手机遥控电机转动
汇总(已更新12篇):lb8820265的“万里”树莓派小车开源分享