Object Chasing Another Object
Here is something I put together to answer this q about a month ago, noticed it active and dug it up.  

Before running script set up a scene with a sphere named "Sphere" and a cone named "Cone", give the cone a track to constraint to make it face the sphere.  The Cone is given a speed custom property.  Animate the sphere and the cone will track it.  This is done with frame change handlers.

NB: Need to fix for when the speed is zero, the track to constraint has no effect, (simple driver) 1 if speed &gt; 0.0 else 0 and what to do when the objects collide.

import bpy
context = bpy.context
scene = context.scene

obA = scene.objects.get("Cone")
obA["speed"] = 0.01

obB = scene.objects.get("Sphere")
preloc = obB.matrix_world.to_translation()

def getloc(scene):
    global preloc
    preloc = obB.matrix_world.to_translation()

def setloc(scene):
    global preloc

    # set location for frame 1
    if scene.frame_current == 1:
        obA.location = (10, 10, 10)

    loc = obB.matrix_world.to_translation()
    v = loc - preloc
    if v.length &gt; 0.000001: # it has moved
        print(scene.frame_current, v)

    # move object A towards B
    dv = loc - obA.location

    speed = obA["speed"]
    print(dv.length)
    if speed &gt; 0.000001 and dv.length &gt; 0.000001:
        obA.location += speed * dv.normalized()

bpy.app.handlers.frame_change_pre.clear()  
bpy.app.handlers.frame_change_pre.append(getloc)
bpy.app.handlers.frame_change_post.clear()
bpy.app.handlers.frame_change_post.append(setloc)