diff --git a/daemon/core/service.py b/daemon/core/service.py index 944dbd5f..e20faf00 100644 --- a/daemon/core/service.py +++ b/daemon/core/service.py @@ -221,7 +221,7 @@ class CoreServices(object): self.defaultservices.clear() self.customservices.clear() - def node_service_startups(self, services): + def node_service_dependencies(self, services): # generate service map and find starting points node_services = {service.name: service for service in services} is_dependency = set() @@ -424,6 +424,7 @@ class CoreServices(object): continue except ValueError: logger.exception("error converting start time to float") + # self.bootnodeservice(node, service, services) result = pool.apply_async(self.bootnodeservice, (node, service, services)) results.append(result) diff --git a/daemon/core/session.py b/daemon/core/session.py index 3af1b5fe..6cae3a62 100644 --- a/daemon/core/session.py +++ b/daemon/core/session.py @@ -10,6 +10,7 @@ import subprocess import tempfile import threading import time +from multiprocessing.pool import ThreadPool import pwd @@ -716,13 +717,24 @@ class Session(object): request flag. """ with self._objects_lock: + pool = ThreadPool() + results = [] + + start = time.time() for obj in self.objects.itervalues(): # TODO: PyCoreNode is not the type to check if isinstance(obj, nodes.PyCoreNode) and not nodeutils.is_node(obj, NodeTypes.RJ45): # add a control interface if configured logger.info("booting node: %s", obj.name) self.add_remove_control_interface(node=obj, remove=False) - obj.boot() + result = pool.apply_async(obj.boot) + results.append(result) + + pool.close() + pool.join() + for result in results: + result.get() + logger.info("BOOT RUN TIME: %s", time.time() - start) self.update_control_interface_hosts() diff --git a/daemon/tests/test_services.py b/daemon/tests/test_services.py index 3cefd7bf..346fa502 100644 --- a/daemon/tests/test_services.py +++ b/daemon/tests/test_services.py @@ -59,7 +59,7 @@ class TestServices: ] # when - startups = session.services.get_service_startups(services) + startups = session.services.node_service_dependencies(services) # then assert len(startups) == 2 @@ -75,7 +75,7 @@ class TestServices: # when with pytest.raises(ValueError): - session.services.get_service_startups(services) + session.services.node_service_dependencies(services) def test_services_dependencies_cycle(self, session): # given @@ -91,4 +91,4 @@ class TestServices: # when with pytest.raises(ValueError): - session.services.get_service_startups(services) + session.services.node_service_dependencies(services)