New submission from Kay F. Jahnke <k_...@web.de>: scheduler uses heapq to schedule it's events. Heapq uses plain >/< comparisons on the events. Now that comparisons of incomparable data are no longer valid, the comparison fails if two events are scheduled for the same time with the same priority, since the comparison continues with comparing the 'action' components ov the event's tuple. I suppose this behaviour is unwanted - at least I did not expect it and it took me some time to figure out what it was due to. I worked around it by assigning comparison functions to the event data type - since this is part of the standard library, maybe a general fix should be considered? Here's my humble snippet of code:
def evtlt ( self , other ): if self.time < other.time: return True elif self.time == other.time: return self.priority < other.priority return False sched.Event.__lt__ = evtlt def evtgt ( self , other ): if self.time > other.time: return True elif self.time == other.time: return self.priority > other.priority return False sched.Event.__gt__ = evtgt If anyone would care to reproduce the (?)bug, try: import sched def foo(): pass def bar(): pass s = sched.scheduler(None, None) s.enterabs ( 0 , 0 , foo , () ) s.enterabs ( 0 , 0 , bar , () ) this produces the following output: Traceback (most recent call last): File "./schedbug.py", line 12, in <module> s.enterabs ( 0 , 0 , bar , () ) File "c:\Programme\Python3.0\lib\sched.py", line 54, in enterabs heapq.heappush(self._queue, event) TypeError: unorderable types: function() < function() ---------- components: Library (Lib) messages: 86408 nosy: kfj severity: normal status: open title: heapq item comparison problematic with sched's events type: behavior versions: Python 3.0 _______________________________________ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue5830> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com