[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