Skip to content

Commit f57e480

Browse files
Wurschdhaudclaude
andcommitted
refactor: replace queue.Queue with collections.deque in _GenericExternalEventHandler
deque.append/popleft is atomic under the GIL, lighter weight, and removes the six.moves dependency. The Execute drain loop is simplified by checking truthiness instead of catching queue.Empty. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 0dfc568 commit f57e480

1 file changed

Lines changed: 9 additions & 12 deletions

File tree

pyrevitlib/pyrevit/revit/events.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Revit events handler management."""
22
#pylint: disable=unused-argument
3-
from six.moves import queue
3+
from collections import deque
44
from pyrevit import HOST_APP
55
from pyrevit import EXEC_PARAMS, DB, UI
66
from pyrevit import framework
@@ -144,24 +144,21 @@ def stop_events():
144144

145145
class _GenericExternalEventHandler(UI.IExternalEventHandler):
146146
def __init__(self):
147-
self._queue = queue.Queue()
147+
self._queue = deque()
148148

149149
def Execute(self, uiapp):
150-
try:
151-
while True:
152-
fn = self._queue.get_nowait()
153-
try:
154-
fn()
155-
except Exception as ex:
156-
mlogger.error("ExternalEvent error: {}".format(ex))
157-
except queue.Empty:
158-
pass
150+
while self._queue:
151+
fn = self._queue.popleft()
152+
try:
153+
fn()
154+
except Exception as ex:
155+
mlogger.error("ExternalEvent error: {}".format(ex))
159156

160157
def GetName(self):
161158
return "GenericExternalEventHandler"
162159

163160
def schedule(self, func):
164-
self._queue.put(func)
161+
self._queue.append(func)
165162

166163

167164
if compat.IRONPY:

0 commit comments

Comments
 (0)