Francesco Romani has uploaded a new change for review. Change subject: janitorial: use contextmanagers for semaphores ......................................................................
janitorial: use contextmanagers for semaphores Since python 2.6, threading.Semaphores can be used as context managers, leading to neater and shorter code. This patch changes the code to do that. Change-Id: Ifa1d4c8866263a612bbfa2ef706f91d6fdca7a6b Signed-off-by: Francesco Romani <from...@redhat.com> --- M mom/GuestManager.py M mom/GuestMonitor.py M mom/Monitor.py 3 files changed, 43 insertions(+), 52 deletions(-) git pull ssh://gerrit.ovirt.org:29418/mom refs/changes/87/31587/1 diff --git a/mom/GuestManager.py b/mom/GuestManager.py index 0035ae4..fc3244d 100644 --- a/mom/GuestManager.py +++ b/mom/GuestManager.py @@ -43,9 +43,8 @@ we are not already tracking. The GuestMonitor constructor might block so don't hold guests_sem while calling it. """ - self.guests_sem.acquire() - spawn_list = set(domain_list) - set(self.guests) - self.guests_sem.release() + with self.guests_sem: + spawn_list = set(domain_list) - set(self.guests) for id in spawn_list: info = self.hypervisor_iface.getVmInfo(id) if info is None: @@ -66,12 +65,11 @@ Wait for GuestMonitors to exit """ while True: - self.guests_sem.acquire() - if len(self.guests) > 0: - (id, thread) = self.guests.popitem() - else: - id = None - self.guests_sem.release() + with self.guests_sem: + if len(self.guests) > 0: + (id, thread) = self.guests.popitem() + else: + id = None if id is not None: thread.join(0) else: @@ -81,16 +79,15 @@ """ Check for stale and/or deceased threads and remove them. """ - self.guests_sem.acquire() - for (id, thread) in self.guests.items(): - # Check if the thread has died - if not thread.isAlive(): - del self.guests[id] - # Check if the domain has ended according to hypervisor interface - elif id not in domain_list: - thread.terminate() - del self.guests[id] - self.guests_sem.release() + with self.guests_sem: + for (id, (mon, thread)) in self.guests.items(): + # Check if the thread has died + if not thread.isAlive(): + del self.guests[id] + # Check if the domain has ended according to hypervisor interface + elif id not in domain_list: + thread.terminate() + del self.guests[id] def interrogate(self): """ @@ -98,12 +95,11 @@ Return: A dictionary of Entities, indexed by guest id """ ret = {} - self.guests_sem.acquire() - for (id, monitor) in self.guests.items(): - entity = monitor.interrogate() - if entity is not None: - ret[id] = entity - self.guests_sem.release() + with self.guests_sem: + for (id, monitor) in self.guests.items(): + entity = monitor.interrogate() + if entity is not None: + ret[id] = entity return ret def run(self): @@ -124,11 +120,10 @@ def rpc_get_active_guests(self): ret = [] - self.guests_sem.acquire() - for (id, monitor) in self.guests.items(): - if monitor.isReady(): - name = monitor.getGuestName() - if name is not None: - ret.append(name) - self.guests_sem.release() + with self.guests_sem: + for (id, monitor) in self.guests.items(): + if monitor.isReady(): + name = monitor.getGuestName() + if name is not None: + ret.append(name) return ret diff --git a/mom/GuestMonitor.py b/mom/GuestMonitor.py index b6a34e1..bb8aa86 100644 --- a/mom/GuestMonitor.py +++ b/mom/GuestMonitor.py @@ -35,10 +35,9 @@ self.setName("GuestMonitor-%s" % info['name']) Monitor.__init__(self, config, self.getName()) self.setDaemon(True) - self.data_sem.acquire() - self.properties.update(info) - self.properties['hypervisor_iface'] = hypervisor_iface - self.data_sem.release() + with self.data_sem: + self.properties.update(info) + self.properties['hypervisor_iface'] = hypervisor_iface collector_list = self.config.get('guest', 'collectors') self.collectors = Collector.get_collectors(collector_list, diff --git a/mom/Monitor.py b/mom/Monitor.py index 7cb0649..57aaeea 100644 --- a/mom/Monitor.py +++ b/mom/Monitor.py @@ -112,11 +112,10 @@ for k in self.optional_fields: data.setdefault(k, None) - self.data_sem.acquire() - self.statistics.append(data) - if len(self.statistics) > self.config.getint('main', 'sample-history-length'): - self.statistics.popleft() - self.data_sem.release() + with self.data_sem: + self.statistics.append(data) + if len(self.statistics) > self.config.getint('main', 'sample-history-length'): + self.statistics.popleft() self._set_ready() if self.plotter is not None: @@ -133,13 +132,12 @@ if self.ready is not True: return None ret = Entity(monitor=self) - self.data_sem.acquire() - for prop in self.properties.keys(): - ret._set_property(prop, self.properties[prop]) - for var in self.variables.keys(): - ret._set_variable(var, self.variables[var]) - ret._set_statistics(self.statistics) - self.data_sem.release() + with self.data_sem: + for prop in self.properties.keys(): + ret._set_property(prop, self.properties[prop]) + for var in self.variables.keys(): + ret._set_variable(var, self.variables[var]) + ret._set_statistics(self.statistics) ret._finalize() return ret @@ -147,10 +145,9 @@ """ Update the variables array to store any updates from an Entity """ - self.data_sem.acquire() - for (var, val) in variables.items(): - self.variables[var] = val - self.data_sem.release() + with self.data_sem: + for (var, val) in variables.items(): + self.variables[var] = val def terminate(self): """ -- To view, visit http://gerrit.ovirt.org/31587 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifa1d4c8866263a612bbfa2ef706f91d6fdca7a6b Gerrit-PatchSet: 1 Gerrit-Project: mom Gerrit-Branch: master Gerrit-Owner: Francesco Romani <from...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches