Ask Solem пре 12 година
родитељ
комит
d1765142a8
1 измењених фајлова са 9 додато и 5 уклоњено
  1. 9 5
      celery/platforms.py

+ 9 - 5
celery/platforms.py

@@ -253,17 +253,21 @@ def _create_pidlock(pidfile):
 
 
 def fileno(f):
-    """Get object fileno, or :const:`None` if not defined."""
-    if isinstance(f, int):
+    if isinstance(f, (int, long)):
         return f
+    return f.fileno()
+
+
+def maybe_fileno(f):
+    """Get object fileno, or :const:`None` if not defined."""
     try:
-        return f.fileno()
+        return fileno(f)
     except AttributeError:
         pass
 
 
 def close_open_fds(keep=None):
-    keep = [fileno(f) for f in keep if fileno(f)] if keep else []
+    keep = [maybe_fileno(f) for f in keep if maybe_fileno(f)] if keep else []
     for fd in reversed(range(get_fdmax(default=2048))):
         if fd not in keep:
             with ignore_errno(errno.EBADF):
@@ -299,7 +303,7 @@ class DaemonContext(object):
 
             close_open_fds(self.stdfds)
             for fd in self.stdfds:
-                self.redirect_to_null(fileno(fd))
+                self.redirect_to_null(maybe_fileno(fd))
 
             self._is_open = True
     __enter__ = open