I have a ball as a RigidBody2D and if I call this function in _ready() the ball is pushed once as expected.
But if I use a timer the behaviour is very different.
func _on_Timer_timeout():
print("timeout") # Thanks to this print you can see the timeout happens only once.
$Ball.apply_central_impulse(Vector2(0.0, -100.0))
The ball accelerates infinitely. My limited thinking abilities didn't find the cause.