From b86bc2cec7166d0bc6e93b4321b07fcccf78b71d Mon Sep 17 00:00:00 2001 From: Inso <insomniak.fr@gmail.com> Date: Fri, 29 Jan 2016 22:48:23 +0100 Subject: [PATCH] Fasten wot graph generation with asyncio.gather --- src/sakia/core/graph/explorer_graph.py | 12 ++++++++---- src/sakia/core/graph/wot_graph.py | 18 ++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/sakia/core/graph/explorer_graph.py b/src/sakia/core/graph/explorer_graph.py index a698e464..a34898db 100644 --- a/src/sakia/core/graph/explorer_graph.py +++ b/src/sakia/core/graph/explorer_graph.py @@ -85,12 +85,16 @@ class ExplorerGraph(BaseGraph): certifier_list, certified_list = await asyncio.gather(certifier_coro, certified_coro) - await self.add_certifier_list(certifier_list, current_identity, identity) + certifier_coro = asyncio.ensure_future(self.add_certifier_list(certifier_list, + current_identity, identity)) logging.debug("New identity certifiers : {pubkey}".format(pubkey=current_identity.pubkey[:5])) - self.graph_changed.emit() - await self.add_certified_list(certified_list, current_identity, identity) + certified_coro = asyncio.ensure_future(self.add_certified_list(certified_list, + current_identity, identity)) + certifier_coro.add_done_callback(lambda f: self.graph_changed.emit()) + certified_coro.add_done_callback(lambda f: self.graph_changed.emit()) + await asyncio.gather(certifier_coro, certified_coro) + logging.debug("New identity certified : {pubkey}".format(pubkey=current_identity.pubkey[:5])) - self.graph_changed.emit() for cert in certified_list + certifier_list: if cert['identity'] not in explorable[step + 1]: diff --git a/src/sakia/core/graph/wot_graph.py b/src/sakia/core/graph/wot_graph.py index b80a6979..c6723977 100644 --- a/src/sakia/core/graph/wot_graph.py +++ b/src/sakia/core/graph/wot_graph.py @@ -22,15 +22,21 @@ class WoTGraph(BaseGraph): self.add_identity(center_identity, node_status) # create Identity from node metadata - certifier_list = await center_identity.unique_valid_certifiers_of(self.app.identities_registry, - self.community) - certified_list = await center_identity.unique_valid_certified_by(self.app.identities_registry, - self.community) + certifier_coro = asyncio.ensure_future(center_identity.unique_valid_certifiers_of(self.app.identities_registry, + self.community)) + certified_coro = asyncio.ensure_future(center_identity.unique_valid_certified_by(self.app.identities_registry, + self.community)) + + certifier_list, certified_list = await asyncio.gather(certifier_coro, certified_coro) # populate graph with certifiers-of - await self.add_certifier_list(certifier_list, center_identity, account_identity) + certifier_coro = asyncio.ensure_future(self.add_certifier_list(certifier_list, + center_identity, account_identity)) # populate graph with certified-by - await self.add_certified_list(certified_list, center_identity, account_identity) + certified_coro = asyncio.ensure_future(self.add_certified_list(certified_list, + center_identity, account_identity)) + + await asyncio.gather(certifier_coro, certified_coro) async def get_shortest_path_to_identity(self, account_identity, to_identity): """ -- GitLab