我有以下代码
def test
t1 = Time.now
@lat = params[:lat]
@lng = params[:lng]
@vehicleid = params[:vehicle_id]
@address = GoogleGeocoder.reverse_geocode([@lat, @lng]).full_address
speed = params[:speed]
speed ||= 0
Tracking.create(:latitude => @lat, :longitude => @lng, :address => @address, :vehicle_id => @vehicleid, :speed => speed)
uid = Vehicle.select('user_id').where('vehicle_id=?', @vehicleid)
gid = VehicleGeozone.where('vehicle_id=?', @vehicleid)
email = User.select('email').where('user_id=?', uid[0].user_id)
gzone = Geozone.where('geozone_id=?', gid[0].geozone_id)
@geofence = Geofence.where('geozone_id = ?', gzone[0].geozone_id)
if gzone[0].zonetype == 'polygon'
infence = false
res = isPointInPoly(@lat.to_f, @lng.to_f, @geofence)
else
res = isPointInCircle(@lat.to_f, @lng.to_f, @geofence[0].latitude, @geofence[0].longitude, @geofence[0].radius)
end
if res == true
AlertMailer.geofence(email[0].email).deliver
end
t2 = Time.now
render :text => '{"message":"success"}'
end
该测试函数每 5 秒调用一次。
从 t1 和 t2 发现处理这个函数需要 7 秒。
有没有办法使用线程,以便我可以将一些密集的代码移动isPointInCircle
到isPointInPoly
单独的线程中?