On Fri, 2011-10-21 at 16:28 +0200, Zdeněk Pavlas wrote:
> Add 'external = True' flag to parallel_wait()
> to relay download requests to external process.
Have you tried on RHEL-6 with ssl cert. repos?
> ---
> urlgrabber/grabber.py | 80 +++++++++++++++++++++++++++++++++++++++++++++++-
> 1 files changed, 78 insertions(+), 2 deletions(-)
>
> diff --git a/urlgrabber/grabber.py b/urlgrabber/grabber.py
> index 6d75c31..953c997 100644
> --- a/urlgrabber/grabber.py
> +++ b/urlgrabber/grabber.py
> @@ -1951,6 +1951,81 @@ def download_process():
> dl.abort()
> sys.exit(0)
>
> +import subprocess
> +
> +class _ExternalDownloader:
> + def __init__(self):
> + self.popen = subprocess.Popen(
> + ['/usr/bin/python', __file__, 'DOWNLOADER'],
> + stdin = subprocess.PIPE,
> + stdout = subprocess.PIPE,
> + )
Dito. __file__ comments. What happens with C-c etc.?
> + self.stdin = self.popen.stdin.fileno()
> + self.stdout = self.popen.stdout.fileno()
Name these better, so we aren't constantly reading from "stdout" and
writing to "stdin".
> + def perform(self):
> + ret = []
> + buf = os.read(self.stdout, 4096)
> + while buf:
> + try: line, buf = buf.split('\n', 1)
> + except ValueError:
> + buf += os.read(self.stdout, 4096)
> + continue
Dito. blocking readline.
> + # parse downloader output
> + line = line.split(' ', 3)
> + cnt, _amount_read = map(int, line[:2])
> + if len(line) == 2:
> + m = self.running[cnt].progress_obj
> + if m:
> + if not m.last_update_time: m.start()
> + m.update(_amount_read)
> + continue
> + # job done
> + opts = self.running.pop(cnt)
> + err = None
> + if line[2] != 'OK':
> + err = URLGrabError(int(line[2]), line[3])
> + ret.append((opts, err, _amount_read))
> + return ret
> +
> + def abort(self):
> + self.popen.stdin.close()
> + self.popen.stdout.close()
> + self.popen.wait()
> +
_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel