How to retry something with a timeout in Python?
Scott David Daniels
Scott.Daniels at Acm.Org
Tue Apr 28 17:23:38 EDT 2009
tinnews at isbd.co.uk wrote:
> This feels like it should be simple but I can't see a clean way of
> doing it at the moment.
>
> I want to retry locking a file for a number of times and then give up,
> in pseudo-code it would be something like:-
>
>
> for N times
> try to lock file
> if successful break out of for loop
> if we don't have a lock then give up and exit
for attempt in range(N):
try:
lock_file_with_timeout(per_try) # change to what you mean
except LockAttemptFailure: # or however the failure is shown
pass # here the attempt+1th try failed.
else:
break # success -- have the lock
else:
raise ImTiredError # however you handle N attempts w/o success
<rest_of_code>
Often it is easiest to stick it in a function:
def retry_lock(tries=3, wait_per_attempt=.5):
for attempt in range(tries):
try:
# change following to whatever you do to attempt a lock.
lock_file_with_timeout(wait_per_attempt)
except LockAttemptFailure: # or however the failure is shown
pass # here the attempt+1th try failed.
else:
return # success -- have the lock
raise ImTiredError
--Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list