summaryrefslogtreecommitdiff
path: root/python/qpid/selector.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/qpid/selector.py')
-rw-r--r--python/qpid/selector.py139
1 files changed, 0 insertions, 139 deletions
diff --git a/python/qpid/selector.py b/python/qpid/selector.py
deleted file mode 100644
index ca5946c3f9..0000000000
--- a/python/qpid/selector.py
+++ /dev/null
@@ -1,139 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-import atexit, time
-from compat import select, set, selectable_waiter
-from threading import Thread, Lock
-
-class Acceptor:
-
- def __init__(self, sock, handler):
- self.sock = sock
- self.handler = handler
-
- def fileno(self):
- return self.sock.fileno()
-
- def reading(self):
- return True
-
- def writing(self):
- return False
-
- def readable(self):
- sock, addr = self.sock.accept()
- self.handler(sock)
-
-class Selector:
-
- lock = Lock()
- DEFAULT = None
-
- @staticmethod
- def default():
- Selector.lock.acquire()
- try:
- if Selector.DEFAULT is None:
- sel = Selector()
- atexit.register(sel.stop)
- sel.start()
- Selector.DEFAULT = sel
- return Selector.DEFAULT
- finally:
- Selector.lock.release()
-
- def __init__(self):
- self.selectables = set()
- self.reading = set()
- self.writing = set()
- self.waiter = selectable_waiter()
- self.reading.add(self.waiter)
- self.stopped = False
- self.thread = None
-
- def wakeup(self):
- self.waiter.wakeup()
-
- def register(self, selectable):
- self.selectables.add(selectable)
- self.modify(selectable)
-
- def _update(self, selectable):
- if selectable.reading():
- self.reading.add(selectable)
- else:
- self.reading.discard(selectable)
- if selectable.writing():
- self.writing.add(selectable)
- else:
- self.writing.discard(selectable)
- return selectable.timing()
-
- def modify(self, selectable):
- self._update(selectable)
- self.wakeup()
-
- def unregister(self, selectable):
- self.reading.discard(selectable)
- self.writing.discard(selectable)
- self.selectables.discard(selectable)
- self.wakeup()
-
- def start(self):
- self.stopped = False
- self.thread = Thread(target=self.run)
- self.thread.setDaemon(True)
- self.thread.start();
-
- def run(self):
- while not self.stopped:
- wakeup = None
- for sel in self.selectables.copy():
- t = self._update(sel)
- if t is not None:
- if wakeup is None:
- wakeup = t
- else:
- wakeup = min(wakeup, t)
-
- if wakeup is None:
- timeout = None
- else:
- timeout = max(0, wakeup - time.time())
-
- rd, wr, ex = select(self.reading, self.writing, (), timeout)
-
- for sel in wr:
- if sel.writing():
- sel.writeable()
-
- for sel in rd:
- if sel.reading():
- sel.readable()
-
- now = time.time()
- for sel in self.selectables.copy():
- w = sel.timing()
- if w is not None and now > w:
- sel.timeout()
-
- def stop(self, timeout=None):
- self.stopped = True
- self.wakeup()
- self.thread.join(timeout)
- self.thread = None