[Yum-devel] [PATCH 3/4] pkglist: use streaming-friendly pkg split

James Antill james at fedoraproject.org
Tue Nov 27 18:25:46 UTC 2012


On Fri, 2012-11-23 at 16:28 +0100, Zdeněk Pavlas wrote:
> ---
>  createrepo/__init__.py |    6 ++++--
>  createrepo/utils.py    |   15 ---------------
>  2 files changed, 4 insertions(+), 17 deletions(-)
> 
> diff --git a/createrepo/__init__.py b/createrepo/__init__.py
> index 622e442..0f1cfee 100644
> --- a/createrepo/__init__.py
> +++ b/createrepo/__init__.py
> @@ -47,7 +47,7 @@ except ImportError:
>      pass
>  
>  from utils import _gzipOpen, compressFile, compressOpen, checkAndMakeDir, GzipFile, \
> -                  checksum_and_rename, split_list_into_equal_chunks
> +                  checksum_and_rename
>  from utils import num_cpus_online
>  import deltarpms
>  
> @@ -612,7 +612,9 @@ class MetaDataGenerator:
>              self._worker_tmp_path = tempfile.mkdtemp() # setting this in the base object so we can clean it up later
>              if self.conf.workers < 1:
>                  self.conf.workers = num_cpus_online()
> -            worker_chunks = split_list_into_equal_chunks(pkgfiles, self.conf.workers)
> +            worker_chunks = [[] for i in range(self.conf.workers)]
> +            for i, pkg in enumerate(pkgfiles):
> +                worker_chunks[i % self.conf.workers].append(pkg)

 NAK. But...

>              worker_cmd_dict = {}
>              worker_jobs = {}
>              base_worker_cmdline = [self.conf.worker_cmd, 
> diff --git a/createrepo/utils.py b/createrepo/utils.py
> index cfe68e6..af9f741 100644
> --- a/createrepo/utils.py
> +++ b/createrepo/utils.py
> @@ -190,21 +190,6 @@ def encodefiletypelist(filetypelist):
>          result += ftl[x]
>      return result
>  
> -def split_list_into_equal_chunks(seq, num_chunks):

 We can't remove this API. But we can change it to:

def split_list_into_equal_chunks2(seq, num_chunks):
    out = [[] for i in range(num_chunks)]
    for i, data in enumerate(seq):
        out[i % num_chunks].append(data)
    return out

...which my tests show that it does basically the same thing but with a
different ordering:

In [3]: s = createrepo.utils.split_list_into_equal_chunks2

In [4]: s([1, 2, 3, 4, 5, 6, 7, 8, 9], 4)
Out[4]: [[1, 5, 9], [2, 6], [3, 7], [4, 8]]

In [5]: s = createrepo.utils.split_list_into_equal_chunks

In [6]: s([1, 2, 3, 4, 5, 6, 7, 8, 9], 4)
Out[6]: [[1, 2], [3, 4], [5, 6], [7, 8, 9]]

...what is the intention of changing the order?



More information about the Yum-devel mailing list