0

私は次のコードを持っています

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別のスレッドに移動できるように、スレッドを使用する方法はありますか?

4

0 に答える 0