Forráskód Böngészése

Merge branch '3.0'

Ask Solem 12 éve
szülő
commit
256207994b

+ 9 - 0
celery/tests/utilities/test_datastructures.py

@@ -182,6 +182,15 @@ class test_LRUCache(Case):
             x[i] = i
         self.assertListEqual(list(x.keys()), list(slots[limit:]))
 
+    def test_update_expires(self):
+        limit = 100
+        x = LRUCache(limit=limit)
+        slots = list(xrange(limit * 2))
+        for i in slots:
+            x.update({i: i})
+
+        self.assertListEqual(list(x.keys()), list(slots[limit:]))
+
     def test_least_recently_used(self):
         x = LRUCache(3)
 

+ 10 - 0
celery/utils/functional.py

@@ -52,6 +52,16 @@ class LRUCache(UserDict):
     def items(self):
         return list(self._iterate_items())
 
+    def update(self, *args, **kwargs):
+        with self.mutex:
+            data, limit = self.data, self.limit
+            data.update(*args, **kwargs)
+            if limit and len(data) > limit:
+                # pop additional items in case limit exceeded
+                # negative overflow will lead to an empty list
+                for item in islice(iter(data), len(data) - limit):
+                    data.pop(item)
+
     def __setitem__(self, key, value):
         # remove least recently used key.
         with self.mutex: