Browse Source

New version of chunks using islice

Ask Solem 15 years ago
parent
commit
4fffcdd359
1 changed files with 7 additions and 8 deletions
  1. 7 8
      celery/utils/__init__.py

+ 7 - 8
celery/utils/__init__.py

@@ -11,7 +11,7 @@ except ImportError:
     ctypes = None
 from uuid import UUID, uuid4, _uuid_generate_random
 from inspect import getargspec
-from itertools import repeat
+from itertools import repeat, islice
 
 from billiard.utils.functional import curry
 
@@ -36,13 +36,8 @@ def chunks(it, n):
         [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]
 
     """
-    acc = []
-    for i, item in enumerate(it):
-        if i and not i % n:
-            yield acc
-            acc = []
-        acc.append(item)
-    yield acc
+    for first in it:
+        yield [first] + list(islice(it, n - 1))
 
 
 def gen_unique_id():
@@ -59,6 +54,10 @@ def gen_unique_id():
     return str(uuid4())
 
 
+def mexpand(container, size):
+    return container[:size] + [None] * (size - len(container))
+
+
 def mitemgetter(*items):
     """Like :func:`operator.itemgetter` but returns ``None`` on missing items
     instead of raising :exc:`KeyError`."""