Selaa lähdekoodia

Unregister file descriptors when streams close. Otherwise, Supervisor spins the CPU when a child process closes stdout or stderr.

Shane Hathaway 10 vuotta sitten
vanhempi
commit
7d2cb94291
1 muutettua tiedostoa jossa 6 lisäystä ja 0 poistoa
  1. 6 0
      supervisor/supervisord.py

+ 6 - 0
supervisor/supervisord.py

@@ -225,6 +225,9 @@ class Supervisor:
                             'read event caused by %(dispatcher)r',
                             'read event caused by %(dispatcher)r',
                             dispatcher=dispatcher)
                             dispatcher=dispatcher)
                         dispatcher.handle_read_event()
                         dispatcher.handle_read_event()
+                        if (not dispatcher.readable()
+                                and not dispatcher.writable()):
+                            self.options.poller.unregister(fd)
                     except asyncore.ExitNow:
                     except asyncore.ExitNow:
                         raise
                         raise
                     except:
                     except:
@@ -238,6 +241,9 @@ class Supervisor:
                             'write event caused by %(dispatcher)r',
                             'write event caused by %(dispatcher)r',
                             dispatcher=dispatcher)
                             dispatcher=dispatcher)
                         dispatcher.handle_write_event()
                         dispatcher.handle_write_event()
+                        if (not dispatcher.readable()
+                                and not dispatcher.writable()):
+                            self.options.poller.unregister(fd)
                     except asyncore.ExitNow:
                     except asyncore.ExitNow:
                         raise
                         raise
                     except:
                     except: