- commit
- 01623df24d7847d03707f474a8d883857c439fe1
- parent
- 26fa20d509cb49c85c731f2ca1b36f71293ccd96
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2020-09-05 15:09
use selector instead of select > high-level and efficient I/O multiplexing [which uses] the most > efficient implementation [epoll] available on the current platform
Diffstat
| M | boon.py | 22 | ++++++++++++---------- |
1 files changed, 12 insertions, 10 deletions
diff --git a/boon.py b/boon.py
@@ -1,6 +1,6 @@ 1 1 import os 2 2 import curses3 -1 import select-1 3 import selectors 4 4 import shutil 5 5 import signal 6 6 import sys @@ -112,22 +112,24 @@ class App: 112 112 def on_resize(self, *args): 113 113 os.write(self.resize_out, b'.') 114 114 -1 115 def select(self, *fileobjs): -1 116 with selectors.DefaultSelector() as sel: -1 117 for fileobj in fileobjs: -1 118 sel.register(fileobj, selectors.EVENT_READ) -1 119 while self.running: -1 120 for key, mask in sel.select(): -1 121 yield key.fileobj -1 122 115 123 def run(self): 116 124 self.running = True 117 125 with fullscreen(): 118 126 self.on_resize()119 -1 while self.running:120 -1 try:121 -1 r, _w, _e = select.select(122 -1 [sys.stdin, self.resize_in], [], [], self.timeout123 -1 )124 -1 except select.error:125 -1 continue126 -1 if self.resize_in in r:-1 127 for fileobj in self.select(sys.stdin, self.resize_in): -1 128 if fileobj is self.resize_in: 127 129 os.read(self.resize_in, 8) 128 130 self.cols, self.rows = shutil.get_terminal_size() 129 131 self.update(force=True)130 -1 if sys.stdin in r:-1 132 elif fileobj is sys.stdin: 131 133 self.on_key(getch()) 132 134 self.update() 133 135