<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def run_forever(dyndnsclients):
 """ Run an endless loop accross the give dynamic dns clients. :param dyndnsclients: list of DynDnsClients """

    while True:
        try:
            # Do small sleeps in the main loop, needs_check() is cheap and does
            # the rest.
            time.sleep(15)
            for dyndnsclient in dyndnsclients:
                dyndnsclient.check()
        except (KeyboardInterrupt,):
            break
        except (Exception,) as exc:
            LOG.critical("An exception occurred in the dyndns loop", exc_info=exc)
    return 0