How to write a bpy.app.handlers handler thats only called once?
It looks like you're adding the render handler multiple times.

If you want a one-off handler, you can do this:

def my_handler(scene):
    print("render complete")
    bpy.app.handlers.render_post.remove(my_handler)


... you'll also want to change unregister not to error when the handler has run.

def unregister():
    if my_handler in bpy.app.handlers.render_post:
        bpy.app.handlers.render_complete.remove(my_handler)




Note: if you end up writing many one-off handlers, you might want to investigate writing a decorator, so a new handler could look like:

@call_once(bpy.app.handlers.render_post)
def my_handler(scene):
      print("render complete")


... where call_once can handle details to avoid a lot of repetition.