ソースを参照

Fixes timer tests

Ask Solem 13 年 前
コミット
e22ab7e64a
2 ファイル変更7 行追加4 行削除
  1. 4 0
      celery/tests/utilities/test_timer2.py
  2. 3 4
      celery/utils/timer2.py

+ 4 - 0
celery/tests/utilities/test_timer2.py

@@ -82,8 +82,12 @@ class test_Timer(Case):
                 done[0] = True
                 done[0] = True
 
 
             t.apply_after(300, set_done)
             t.apply_after(300, set_done)
+            mss = 0
             while not done[0]:
             while not done[0]:
+                if mss >= 2.0:
+                    raise Exception('test timed out')
                 time.sleep(0.1)
                 time.sleep(0.1)
+                mss += 0.1
         finally:
         finally:
             t.stop()
             t.stop()
 
 

+ 3 - 4
celery/utils/timer2.py

@@ -14,7 +14,7 @@ import os
 import sys
 import sys
 import threading
 import threading
 
 
-from datetime import datetime, timedelta
+from datetime import datetime
 from functools import wraps
 from functools import wraps
 from itertools import count, imap
 from itertools import count, imap
 from time import time, sleep
 from time import time, sleep
@@ -114,7 +114,7 @@ class Schedule(object):
 
 
         """
         """
         if eta is None:
         if eta is None:
-            eta = datetime.now()
+            eta = time()
         if isinstance(eta, datetime):
         if isinstance(eta, datetime):
             try:
             try:
                 eta = to_timestamp(eta)
                 eta = to_timestamp(eta)
@@ -132,8 +132,7 @@ class Schedule(object):
         return self.enter(self.Entry(fun, args, kwargs), eta, priority)
         return self.enter(self.Entry(fun, args, kwargs), eta, priority)
 
 
     def enter_after(self, msecs, entry, priority=0):
     def enter_after(self, msecs, entry, priority=0):
-        eta = datetime.now() + timedelta(seconds=msecs / 1000.0)
-        return self.enter(entry, eta, priority)
+        return self.enter(entry, time() + (msecs / 1000.0), priority)
 
 
     def apply_after(self, msecs, fun, args=(), kwargs={}, priority=0):
     def apply_after(self, msecs, fun, args=(), kwargs={}, priority=0):
         return self.enter_after(msecs, self.Entry(fun, args, kwargs), priority)
         return self.enter_after(msecs, self.Entry(fun, args, kwargs), priority)