问题描述
所以我正在运行 Airsim 并且我有一个 API 来收集数据并将其写入文件。我想将写入速度的频率限制为 60 Hz(或每秒写入 60 次)。我该怎么做。目前我只有一个 while 循环中的 write 命令。
虽然为真:
gps_data = client.getGpsData().gnss.geo_point
alt = (gps_data.altitude)
lat = (gps_data.latitude)
lon = (gps_data.longitude)
gps_data_struct = [lat,lon,alt]
with open(output_file,'a') as gpscsvfile:
gpscsvwriter = csv.writer(gpscsvfile)
gpscsvwriter = gpscsvwriter.writerow(gps_data_struct)
#print("Altitude: %s\nLatitude %s\nLongitude %s" %(alt,lat,lon) )
if False:
break
解决方法
好的,所以这假设 while True
中的所有代码运行时间不到 1 秒,对吗?如果代码最终花费的时间超过 1 秒,那么下面的代码将在上次运行后每隔“整秒”值运行一次代码。即如果第一次运行从 0
开始并用时 1.1
秒,那么第二次运行将从 2
开始。
import time
starttime = time.time()
while True:
gps_data = client.getGpsData().gnss.geo_point
alt = gps_data.altitude
lat = gps_data.latitude
lon = gps_data.longitude
gps_data_struct = [lat,lon,alt]
with open(output_file,'a') as gpscsvfile:
gpscsvwriter = csv.writer(gpscsvfile)
gpscsvwriter = gpscsvwriter.writerow(gps_data_struct)
time.sleep(1 - ((time.time() - starttime) % 1))
如果你需要更强大的东西,你可以看看APScheduler