Skip to content

Commit

Permalink
retry on eint
Browse files Browse the repository at this point in the history
  • Loading branch information
cenkalti committed Aug 27, 2013
1 parent c62b217 commit c411e11
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
14 changes: 14 additions & 0 deletions kuyruk/helpers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
Contains generic functions/classes that can be used in any project.
"""
import errno
import select
import logging
import threading
import traceback
Expand Down Expand Up @@ -93,3 +95,15 @@ def print_stack(sig, frame):
print '=' * 70
print ''.join(traceback.format_stack())
print '-' * 70


def retry_on_eintr(f):
@wraps(f)
def inner(*args, **kwargs):
while True:
try:
return f(*args, **kwargs)
except (select.error, OSError) as e:
if e[0] != errno.EINTR:
raise
return inner
5 changes: 3 additions & 2 deletions kuyruk/master.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

from setproctitle import setproctitle

from kuyruk import __version__
from kuyruk import __version__, helpers
from kuyruk.process import KuyrukProcess


Expand Down Expand Up @@ -82,8 +82,9 @@ def wait_for_workers(self):
If a worker is dead and Kuyruk is running state, spawns a new worker.
"""
retry_wait = helpers.retry_on_eintr(os.wait)
while self.workers:
pid, status = os.wait()
pid, status = retry_wait()
worker = self.workers[pid]
if not self.shutdown_pending.is_set():
worker.kill_pg()
Expand Down

0 comments on commit c411e11

Please sign in to comment.