Impacted versions:
11.0

Steps to reproduce:
Run either 11.0 branch from github or the odoo:11.0 docker image with the --dev=reload argument, and then cause a autoreload by updating python code that is watched.

Current behavior:
The odoo instance shuts down because of a KeyboardInterrupt():

    skynet:~/odoo/odoo-git$ docker run -v /home/rakete/odoo/addons:/mnt/extra-addons -v /home/rakete/odoo/etc/odoo:/etc/odoo -p 8069:8069 --name odoo-dev --link odoo-db:db -t odoo-dev:latest -- --dev=reload
    2017-11-23 19:58:02,483 1 INFO ? odoo: Odoo version 11.0-20171030
    2017-11-23 19:58:02,483 1 INFO ? odoo: Using configuration file at /etc/odoo/odoo.conf
    2017-11-23 19:58:02,483 1 INFO ? odoo: addons paths: ['/var/lib/odoo/addons/11.0', '/mnt/extra-addons', '/usr/lib/python3/dist-packages/odoo/addons']
    2017-11-23 19:58:02,483 1 INFO ? odoo: database: odoo@172.17.0.2:5432
    2017-11-23 19:58:02,490 1 INFO ? odoo.service.server: Watching addons folder /var/lib/odoo/addons/11.0
    2017-11-23 19:58:02,490 1 INFO ? odoo.service.server: Watching addons folder /mnt/extra-addons
    2017-11-23 19:58:02,490 1 INFO ? odoo.service.server: Watching addons folder /usr/lib/python3/dist-packages/odoo/addons
    2017-11-23 19:58:02,641 1 INFO ? odoo.service.server: AutoReload watcher running
    2017-11-23 19:58:02,642 1 INFO ? odoo.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069
    2017-11-23 19:58:02,705 1 INFO ? odoo.addons.base.ir.ir_actions_report: Will use the Wkhtmltopdf binary at /usr/local/bin/wkhtmltopdf
    2017-11-23 19:58:05,499 1 INFO ? odoo.service.server: autoreload: python code updated, autoreload activated
    2017-11-23 19:58:05,500 1 INFO ? odoo.service.server: Initiating shutdown
    2017-11-23 19:58:05,500 1 INFO ? odoo.service.server: Hit CTRL-C again or send a second signal to force the shutdown.
    2017-11-23 19:58:05,501 1 INFO ? odoo.service.server: autoreload: python code updated, autoreload activated
    Traceback (most recent call last):
      File "/usr/bin/odoo", line 8, in <module>
    2017-11-23 19:58:05,502 1 INFO ? odoo.service.server: autoreload: python code updated, autoreload activated
      File "/usr/lib/python3/dist-packages/odoo/cli/command.py", line 60, in main
        o.run(args)
      File "/usr/lib/python3/dist-packages/odoo/cli/server.py", line 175, in run
        main(args)
      File "/usr/lib/python3/dist-packages/odoo/cli/server.py", line 169, in main
        rc = odoo.service.server.start(preload=preload, stop=stop)
      File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 993, in start
        rc = server.run(preload, stop)
      File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 335, in run
        self.stop()
      File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 289, in stop
        self.httpd.shutdown()
      File "/usr/lib/python3.5/socketserver.py", line 249, in shutdown
        self.__is_shut_down.wait()
      File "/usr/lib/python3.5/threading.py", line 549, in wait
        signaled = self._cond.wait(timeout)
      File "/usr/lib/python3.5/threading.py", line 293, in wait
        waiter.acquire()
      File "/usr/lib/python3/dist-packages/odoo/service/server.py", line 214, in signal_handler
        raise KeyboardInterrupt()
    KeyboardInterrupt
    skynet:~/odoo/odoo-git$

Expected behavior:
Odoo should automatically reload the updated python file.

Fixes https://github.com/odoo/odoo/issues/21214

odoo/service/server.py
if config['http_enable']:
            while len(self.workers_http) < self.population:
                self.worker_spawn(WorkerHTTP, self.workers_http)
            if not self.long_polling_pid:
                self.long_polling_spawn()
        while len(self.workers_cron) < config['max_cron_threads']:
            self.worker_spawn(WorkerCron, self.workers_cron)
    def sleep(self):
        try:
            
            fds = {w.watchdog_pipe[0]: w for w in self.workers.values()}
            fd_in = list(fds) + [self.pipe[0]]
            
            ready = select.select(fd_in, [], [], self.beat)
            
            for fd in ready[0]:
                if fd in fds:
                    fds[fd].watchdog_time = time.time()
                try:
                    
                    while os.read(fd, 1):
                        pass
                except OSError as e:
                    if e.errno not in [errno.EAGAIN]:
                        raise
        except select.error as e:
            if e.args[0] not in [errno.EINTR]:
                raise
    def start(self):