Event::wait with timeout gives delay

  • Thread starter Okko Willeboordse
  • Start date
O

Okko Willeboordse

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)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top