[Pkg-bitcoin-commits] [python-quamash] 52/269: Implement event poller thread as QThread
Jonas Smedegaard
dr at jones.dk
Fri Nov 24 11:26:15 UTC 2017
This is an automated email from the git hooks/post-receive script.
js pushed a commit to branch master
in repository python-quamash.
commit 32e87660f764cab2560b9731b5a0aa90d8c6fdd0
Author: Arve Knudsen <arve.knudsen at gmail.com>
Date: Sat Jul 5 14:10:16 2014 +0200
Implement event poller thread as QThread
---
quamash/__init__.py | 65 ++++++++++++++++++++++++++++++++---------------------
1 file changed, 39 insertions(+), 26 deletions(-)
diff --git a/quamash/__init__.py b/quamash/__init__.py
index 7a5829e..5b80814 100644
--- a/quamash/__init__.py
+++ b/quamash/__init__.py
@@ -29,38 +29,53 @@ from ._common import with_logger
@with_logger
+class _EventWorker(QtCore.QThread):
+ def __init__(self, selector, parent):
+ super().__init__()
+
+ self.__stop = False
+ self.__selector = selector
+ self.__sig_events = parent.sig_events
+ self.semaphore = QtCore.QSemaphore()
+
+ def stop(self):
+ self.__stop = True
+ # Wait for thread to end
+ self.semaphore.acquire()
+
+ def run(self):
+ self._logger.debug('Thread started')
+ self.semaphore.release()
+
+ while not self.__stop:
+ events = self.__selector.select(0.01)
+ if events:
+ self._logger.debug('Got events {}'.format(events))
+ self.__sig_events.emit(list(events))
+
+ self.semaphore.release()
+ self._logger.debug('Exiting thread')
+
+
+ at with_logger
class _EventPoller(QtCore.QObject):
"""Polling of events in separate thread."""
sig_events = QtCore.Signal(list)
def __init__(self, selector):
super(_EventPoller, self).__init__()
- self.__semaphore = threading.Semaphore(0)
self.__selector = selector
def start(self):
- self.__canceled = False
- self._logger.debug('Starting')
- threading.Thread(target=self.__run).start()
+ self._logger.debug('Starting...')
+ self.__worker = _EventWorker(self.__selector, self)
+ self.__worker.start()
# Wait for thread to start
- self.__semaphore.acquire()
+ self.__worker.semaphore.acquire()
def stop(self):
- self._logger.debug('Stopping')
- self.__canceled = True
- # Wait for thread to end
- self.__semaphore.acquire()
-
- def __run(self):
- self.__semaphore.release()
-
- while not self.__canceled:
- events = self.__selector.select(0.01)
- if events:
- self._logger.debug('Got events {}'.format(events))
- self.sig_events.emit(events)
-
- self.__semaphore.release()
+ self._logger.debug('Stopping worker thread...')
+ self.__worker.stop()
@with_logger
@@ -211,7 +226,7 @@ class QEventLoop(QtCore.QObject, _baseclass):
print('Initing Qt')
QtCore.QObject.__init__(self)
print('Inited')
- # _baseclass.__init__(self, _selector_cls())
+ _baseclass.__init__(self, _selector_cls())
self.__event_poller = _EventPoller(self._selector)
self.__event_poller.sig_events.connect(self.__on_events)
@@ -240,7 +255,6 @@ class QEventLoop(QtCore.QObject, _baseclass):
# self.__start_io_event_loop()
- semaphore = threading.Semaphore(0)
self.__is_running = True
self._logger.debug('Starting Qt event loop')
try:
@@ -252,10 +266,9 @@ class QEventLoop(QtCore.QObject, _baseclass):
finally:
self._logger.debug('Stopping event poller')
self.__event_poller.stop()
- self._logger.debug('Stopping IO event loop...')
+ # self._logger.debug('Stopping IO event loop...')
# self.__io_event_loop.call_soon_threadsafe(stop_io_event_loop)
- with semaphore:
- self.__is_running = False
+ self.__is_running = False
def run_until_complete(self, future):
"""Run until Future is complete."""
@@ -276,7 +289,7 @@ class QEventLoop(QtCore.QObject, _baseclass):
def stop(self):
"""Stop event loop."""
if not self.__is_running:
- self._logger.debug('Not running')
+ self._logger.debug('Already stopped')
return
self._logger.debug('Stopping eventloop...')
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-bitcoin/python-quamash.git
More information about the Pkg-bitcoin-commits
mailing list