.csv 在 python 中写入的硬编码频率

问题描述

所以我正在运行 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