From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1RuyJJ-0001PT-5y for garchives@archives.gentoo.org; Wed, 08 Feb 2012 03:35:09 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 759AAE0761; Wed, 8 Feb 2012 03:35:00 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 0086AE0761 for ; Wed, 8 Feb 2012 03:34:59 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 3E23E1B402F for ; Wed, 8 Feb 2012 03:34:59 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 8661F80043 for ; Wed, 8 Feb 2012 03:34:58 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <334c911923af24a7a7d977b28b24a09686e9906d.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: pym/_emerge/PollScheduler.py pym/_emerge/Scheduler.py X-VCS-Directories: pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 334c911923af24a7a7d977b28b24a09686e9906d Date: Wed, 8 Feb 2012 03:34:58 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: 9843ba14-bf75-4698-b41d-da7899256c2a X-Archives-Hash: 0a4e7a9250df92d9abb4407961b18c5f commit: 334c911923af24a7a7d977b28b24a09686e9906d Author: Zac Medico gentoo org> AuthorDate: Wed Feb 8 03:21:58 2012 +0000 Commit: Zac Medico gentoo org> CommitDate: Wed Feb 8 03:34:16 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D334c9119 PollScheduler: add iteration method --- pym/_emerge/PollScheduler.py | 33 ++++++++++++++++++++++++--------- pym/_emerge/Scheduler.py | 6 +++--- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/pym/_emerge/PollScheduler.py b/pym/_emerge/PollScheduler.py index ab18f0d..9ddcd96 100644 --- a/pym/_emerge/PollScheduler.py +++ b/pym/_emerge/PollScheduler.py @@ -1,4 +1,4 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 =20 import gzip @@ -24,7 +24,7 @@ from _emerge.PollSelectAdapter import PollSelectAdapter class PollScheduler(object): =20 class _sched_iface_class(SlotObject): - __slots__ =3D ("idle_add", "io_add_watch", + __slots__ =3D ("idle_add", "io_add_watch", "iteration", "output", "register", "schedule", "source_remove", "timeout_add", "unregister") =20 @@ -59,6 +59,7 @@ class PollScheduler(object): self.sched_iface =3D self._sched_iface_class( idle_add=3Dself._idle_add, io_add_watch=3Dself._register, + iteration=3Dself._iteration, output=3Dself._task_output, register=3Dself._register, schedule=3Dself._schedule_wait, @@ -268,14 +269,24 @@ class PollScheduler(object): if not event_handled: raise AssertionError("tight loop") =20 - def _schedule_yield(self): + def _iteration(self, *args): """ - Schedule for a short period of time chosen by the scheduler based - on internal state. Synchronous tasks should call this periodically - in order to allow the scheduler to service pending poll events. The - scheduler will call poll() exactly once, without blocking, and any - resulting poll events will be serviced. + Like glib.MainContext.iteration(), runs a single iteration. + @type may_block: bool + @param may_block: if True the call may block waiting for an event + (default is True). + @rtype: bool + @return: True if events were dispatched. """ + + may_block =3D True + + if args: + if len(args) > 1: + raise TypeError( + "expected at most 1 argument (%s given)" % len(args)) + may_block =3D args[0] + event_handlers =3D self._poll_event_handlers events_handled =3D 0 =20 @@ -283,7 +294,11 @@ class PollScheduler(object): return bool(events_handled) =20 if not self._poll_event_queue: - self._poll(0) + if may_block: + timeout =3D 0 + else: + timeout =3D None + self._poll(timeout=3Dtimeout) =20 try: while event_handlers and self._poll_event_queue: diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index b6b6586..e22ef46 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -1,4 +1,4 @@ -# Copyright 1999-2011 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 =20 from __future__ import print_function @@ -81,7 +81,7 @@ class Scheduler(PollScheduler): =20 class _iface_class(PollScheduler._sched_iface_class): __slots__ =3D ("fetch", - "scheduleSetup", "scheduleUnpack", "scheduleYield") + "scheduleSetup", "scheduleUnpack") =20 class _fetch_iface_class(SlotObject): __slots__ =3D ("log_file", "schedule") @@ -221,11 +221,11 @@ class Scheduler(PollScheduler): fetch=3Dfetch_iface, output=3Dself._task_output, idle_add=3Dself._idle_add, io_add_watch=3Dself._register, + iteration=3Dself._iteration, register=3Dself._register, schedule=3Dself._schedule_wait, scheduleSetup=3Dself._schedule_setup, scheduleUnpack=3Dself._schedule_unpack, - scheduleYield=3Dself._schedule_yield, source_remove=3Dself._unregister, timeout_add=3Dself._timeout_add, unregister=3Dself._unregister)