Event::wait with timeout gives delay

Okko Willeboordse okko.willeboordse at gmail.com
Sun Feb 9 12:53:04 CET 2014


Running Python 2.6 and 2.7 on Windows 7 and Server 2012

Event::wait causes a delay when used with a timeout that is not triggered because event is set in time. I don't understand why.

Can someone explain?

The following program shows this;

'''Shows that using a timeout in Event::wait (same for Queue::wait) causes a delay.
This is perhaps caused by a polling loop inside the wait implementation.
This polling loop sleeps some time depending on the timeout.
Probably wait timeout > 1ms => sleep = 1ms
A wait with timeout can take at least this sleep time even though the event is set or queue 
filled much faster.'''
import threading

event1 = threading.Event()
event2 = threading.Event()

def receiver():
  '''wait 4 event2, clear event2 and set event1.'''
  while True:
    event2.wait()
    event2.clear()
    event1.set()

receiver_thread = threading.Thread(target = receiver)
receiver_thread.start()

def do_transaction(timeout):
  '''Performs a transaction; clear event1, set event2 and wait for thread to set event1.'''
  event1.clear()
  event2.set()
  event1.wait(timeout = timeout)

while True:
  # With timeout None this runs fast and CPU bound.
  # With timeout set to some value this runs slow and not CPU bound.
  do_transaction(timeout = 10.0)



More information about the Python-list mailing list