[Pkg-bitcoin-commits] [python-quamash] 54/269: Fix on Windows
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 e5b300c08553d925edd092c897e6be5b1668afa6
Author: Arve Knudsen <arve.knudsen at gmail.com>
Date: Sat Jul 5 19:12:01 2014 +0200
Fix on Windows
---
quamash/__init__.py | 58 +++-------------------------------------------
quamash/_unix.py | 11 ++++++---
quamash/_windows.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++--
tests/test_qeventloop.py | 4 ++--
4 files changed, 71 insertions(+), 62 deletions(-)
diff --git a/quamash/__init__.py b/quamash/__init__.py
index 2535723..ac04931 100644
--- a/quamash/__init__.py
+++ b/quamash/__init__.py
@@ -29,53 +29,6 @@ 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 start(self):
- super().start()
- self.__semaphore.acquire()
-
- def stop(self):
- self.__stop = True
- # Wait for thread to end
- self.wait()
-
- def run(self):
- self._logger.debug('Thread started')
- self.__semaphore.release()
-
- while not self.__stop:
- events = self.__selector.select(0.1)
- if events:
- self._logger.debug('Got events from poll: {}'.format(events))
- self.__sig_events.emit(events)
-
- self._logger.debug('Exiting thread')
-
-
- at with_logger
-class _EventPoller(QtCore.QObject):
- """Polling of events in separate thread."""
- sig_events = QtCore.Signal(list)
-
- def start(self, selector):
- self._logger.debug('Starting (selector: {})...'.format(selector))
- self.__worker = _EventWorker(selector, self)
- self.__worker.start()
-
- def stop(self):
- self._logger.debug('Stopping worker thread...')
- self.__worker.stop()
-
-
- at with_logger
class _QThreadWorker(QtCore.QThread):
"""
Read from the queue.
@@ -226,24 +179,19 @@ class QEventLoop(_baseclass):
self.__default_executor = None
self.__exception_handler = None
- _baseclass.__init__(self)
-
- # self.__event_poller = _EventPoller()
- # self.__event_poller.sig_events.connect(self._process_events)
+ super().__init__()
def run_forever(self):
"""Run eventloop forever."""
self.__is_running = True
- # self._logger.debug('Starting event poller')
- # self.__event_poller.start(self._selector)
+ self._before_run_forever()
try:
self._logger.debug('Starting Qt event loop')
rslt = self.__app.exec_()
self._logger.debug('Qt event loop ended with result {}'.format(rslt))
return rslt
finally:
- # self._logger.debug('Stopping event poller')
- # self.__event_poller.stop()
+ self._after_run_forever()
self.__is_running = False
def run_until_complete(self, future):
diff --git a/quamash/_unix.py b/quamash/_unix.py
index d840ba5..99a2320 100644
--- a/quamash/_unix.py
+++ b/quamash/_unix.py
@@ -93,8 +93,7 @@ class _Selector(selectors.BaseSelector):
key = selectors.SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)
if key.fd in self._fd_to_key:
- raise KeyError("{!r} (FD {}) is already registered"
- .format(fileobj, key.fd))
+ raise KeyError("{!r} (FD {}) is already registered".format(fileobj, key.fd))
self._fd_to_key[key.fd] = key
@@ -130,7 +129,7 @@ class _Selector(selectors.BaseSelector):
try:
del self.__read_notifiers[key.fd]
except KeyError:
- pass
+ pass
try:
del self.__write_notifiers[key.fd]
except KeyError:
@@ -187,6 +186,12 @@ class _SelectorEventLoop(asyncio.SelectorEventLoop):
self._ssock.fileno(), QtCore.QSocketNotifier.Read)
socket_notifier.activated.connect(self.__wake_on_socket)
+ def _before_run_forever(self):
+ pass
+
+ def _after_run_forever(self):
+ pass
+
def _process_event(self, key, mask):
"""Selector has delivered us an event."""
self._logger.debug('Processing event with key {} and mask {}'.format(key, mask))
diff --git a/quamash/_windows.py b/quamash/_windows.py
index 85860b5..2446b83 100644
--- a/quamash/_windows.py
+++ b/quamash/_windows.py
@@ -8,11 +8,14 @@ import math
from ._common import with_logger, QtCore
-class ProactorEventLoop(QtCore.QObject, asyncio.ProactorEventLoop):
+class _ProactorEventLoop(QtCore.QObject, asyncio.ProactorEventLoop):
def __init__(self):
QtCore.QObject.__init__(self)
asyncio.ProactorEventLoop.__init__(self, _IocpProactor())
+ self.__event_poller = _EventPoller()
+ self.__event_poller.sig_events.connect(self._process_events)
+
def _process_events(self, events):
for f, callback, transferred, key, ov in events:
try:
@@ -24,8 +27,14 @@ class ProactorEventLoop(QtCore.QObject, asyncio.ProactorEventLoop):
else:
f.set_result(value)
+ def _before_run_forever(self):
+ self.__event_poller.start(self._selector)
+
+ def _after_run_forever(self):
+ self.__event_poller.stop()
-baseclass = asyncio.ProactorEventLoop
+
+baseclass = _ProactorEventLoop
@with_logger
@@ -85,3 +94,50 @@ class _IocpProactor(windows_events.IocpProactor):
self.__events.append((f, callback, transferred, key, ov))
ms = 0
+
+
+ at 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 start(self):
+ super().start()
+ self.__semaphore.acquire()
+
+ def stop(self):
+ self.__stop = True
+ # Wait for thread to end
+ self.wait()
+
+ def run(self):
+ self._logger.debug('Thread started')
+ self.__semaphore.release()
+
+ while not self.__stop:
+ events = self.__selector.select(0.1)
+ if events:
+ self._logger.debug('Got events from poll: {}'.format(events))
+ self.__sig_events.emit(events)
+
+ self._logger.debug('Exiting thread')
+
+
+ at with_logger
+class _EventPoller(QtCore.QObject):
+ """Polling of events in separate thread."""
+ sig_events = QtCore.Signal(list)
+
+ def start(self, selector):
+ self._logger.debug('Starting (selector: {})...'.format(selector))
+ self.__worker = _EventWorker(selector, self)
+ self.__worker.start()
+
+ def stop(self):
+ self._logger.debug('Stopping worker thread...')
+ self.__worker.stop()
diff --git a/tests/test_qeventloop.py b/tests/test_qeventloop.py
index 6d3a2ab..f635bb1 100644
--- a/tests/test_qeventloop.py
+++ b/tests/test_qeventloop.py
@@ -13,8 +13,8 @@ sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')
import quamash
-logging.basicConfig(level=logging.DEBUG,
- format='%(asctime)s - %(levelname)s - %(name)s - %(message)s')
+logging.basicConfig(
+ level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(name)s - %(message)s')
class _SubprocessProtocol(asyncio.SubprocessProtocol):
--
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